在C中声明一组结构时的奇怪性

时间:2018-05-17 18:57:37

标签: c arrays pointers struct

基本上我的代码中有这样的东西

struct connComp {
  struct connComp *parent;
  struct connComp *neigh[noNN];
  int *pSpinValue, SpinValue, Flag;
  unsigned int size;
} comp[N];

当我尝试使用结构comp[N]数组作为void function(struct connComp)类型函数的输入时,通过在我的代码中编写function(comp),我从gcc编译器收到以下错误:

  

'function'函数(comp)的参数1的不兼容类型

     

预期'struct connComp'但参数的类型为'struct connComp *'

所以看起来comp[N]被声明为指针,我真的无法弄明白为什么。非常感谢您的任何帮助!

2 个答案:

答案 0 :(得分:2)

将指针和数组传递给函数,C是等效的。 comp是N connComp个结构的数组。将comp传递给函数时,您将拥有数组起始地址,其行为与指针的行为方式相同。要在需要结构的函数中使用comp,必须取消引用指针 - 尝试传入comp[0]

答案 1 :(得分:1)

C 中的数组是指针。具体来说,是数组的第一个元素。

要将单个元素传递给函数,您需要指定哪个元素。 e.g。

function(comp[2]);

如果要在函数中处理整个数组,则需要更改函数以接受结构数组或指向结构的指针。 e.g。

void function(struct connComp[N]); /* to receive an array of a static size */
void function(struct connComp*);   /* to receive an array of a variable size */