指向结构数组的指针

时间:2011-06-30 14:13:01

标签: c pointers comparison structure

我正在尝试比较我的结构数组的两个节点之间的变量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 个答案:

答案 0 :(得分:3)

  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 :(得分:1)

您正在将指针与结构进行比较,而不是变量。我不知道你的结构定义,但我认为你需要像:

return(if(ia->arco[i].dist > ib->arco[i].dist)? 1 : 0);

答案 2 :(得分:0)

您的代码中存在很多错误, 你最初返回一个结构指针,而你的函数声明是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。

答案 3 :(得分:0)

arco不是arco的成员。

不要说“它是错的”,而是发布你得到的编译器错误,然后你会得到更好的答案。