Possible Duplicate:
Sizeof an array in the C programming language?
Why sizeof(param_array) is the size of pointer?
void printSizeOfArray(int a[])
{
printf("%lu\n", sizeof(a));
}
int main()
{
int it;
int a[4] = {0};
printSizeOfArray(a);
return 0;
}
当我运行代码时,我得到 8。为什么指向数组的指针是 void 类型的指针?
如果指向数组的指针是 void 类型,为什么,当我写时:
int *it;
int a[4] = {0};
it = a;
printf("%lu\n", sizeof(it));
也可以正常使用吗?我如何用 int
来指向?
另外,为什么第二个打印的是 8 而不是 4?它是指向数组( void*
)的指针,而不是 int
.
最佳答案
C 中的数组经常“衰减”为仅指向第一个元素的指针。正如您所注意到的,该指针不保留有关数组大小的任何信息。当数组传递给函数时,就会发生这种衰减。
正确的大小只能通过范围内正确的声明来计算。因此,您可以使其适用于函数,但随后数组的大小将成为函数原型(prototype)的一部分,这很少有用:
void printSizeOfArray(int a[3]);
这就是为什么典型的 C 代码总是单独传递大小。
基本上,C 对数组的支持是“弱”的。
关于c - 指向数组的指针 - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250728/