указатели на массив структур - PullRequest
1 голос
/ 30 июня 2011

Я пытаюсь сравнить переменную dist между двумя узлами моего массива структур.

Это структура:

struct arco{
  int u, v;
  double temp, dist; 
}arcos[MAXOASIS];

Это мой код:

int compDist(const void *a, *void const *b, i, j){
  struct arco *ia = (struct arco *)a;
  struct arco *ib = (struct arco *)b;
  ia->arco[i].dist;
  ib->arco[j].dist;
  return(if(*ia > *ib)? *ia : *ib)
}

Но это неправильно. Как это должно быть сделано?

Ответы [ 4 ]

3 голосов
/ 30 июня 2011
  ia->arco[i].dist;
  ib->arco[j].dist;

Что это должно делать?Вы, вероятно, хотите что-то вроде

return(ia->arco[i].dist > ib->arco[j].dist? ia->arco[i].dist : ia->arco[j].dist)

Вы можете использовать некоторые промежуточные переменные, чтобы сделать его чище.

РЕДАКТИРОВАТЬ

В свете ваших правок этоскорее всего, вы хотите:

return (ia->dist - ib->dist);
1 голос
/ 30 июня 2011

Вы сравниваете указатель на strutcs, а не на переменные.Я не знаю вашего определения структуры, но я думаю, что вам нужно что-то вроде:

return(if(ia->arco[i].dist > ib->arco[i].dist)? 1 : 0);
0 голосов
/ 30 июня 2011

arco не является членом arco.

Вместо того чтобы говорить «это неправильно», опубликуйте сообщения об ошибках компилятора, и вы получите лучшие ответы в ответ.

0 голосов
/ 30 июня 2011

В вашем коде много ошибок, Вы изначально возвращали указатель на структуру, тогда как в объявлении функции указано int.

 struct arco *compDist(const void *a, *void const *b, i, j){
  struct arco *ia = (struct arco *)a;
  struct arco *ib = (struct arco *)b;
  return(if(ia->arco[i].dist > ib->arco[j].dist)? *ia : *ib)
}

Также сравнение, как

if(*ia > *ib)

неверен, вы не можете просто сравнить две структуры, в c ++ вы можете перегрузить оператор '>', но вы не можете сделать то же самое в c, насколько я знаю.

Это должно сработать, но я не могу этого гарантировать, так как понятия не имею, как вы определили свою структуру arco.

...