C:查找数组中的元素数量[]

Lav*_*dor 14 c arrays pointers

在C中:在将结构发送到函数后,如何找到结构数组中的元素数?

int main(void) {
  myStruct array[] = { struct1, struct2, struct3, struct4, struct5, struct6 };
  printf("%d\n", sizeof(array));
  printf("%d\n", sizeof(array[0]));
  f(array);
}
void f(myStruct* array) {
  printf("%d\n", sizeof(array));
  printf("%d\n", sizeof(array[0]));
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,main中的printf显示的结果与f中的printf不同.我需要知道数组中有多少元素.

pmg*_*pmg 19

你不能.

你必须将大小传递给函数,例如:

void f(myStruct* array, size_t siz);
Run Code Online (Sandbox Code Playgroud)

还要注意,在f数组中是一个指针,而在main它中是一个数组.数组和指针是不同的东西.

  • @Christian Mann:有几个原因,包括:`sizeof`返回的值的类型是`size_t`; 数组大小永远不会是负数,因此对数组大小使用无符号类型是有意义的; `size_t`保证是足够宽,以容纳可以在任一个时刻被分配的最大字节数,而`int`不是(IOW,如果T的阵列可以包含2 ^ 64个字节,然后`size_t`保证是64位宽,但`int`只能保证至少16位宽); (2认同)

Pau*_*ams 10

在f中array是一个指针,在main中array是一个数组.

  • 一旦你有一个指针,你就无法确定元素的数量. (6认同)