考虑这段代码(或者只是复制/粘贴并运行它):
#include <stdio.h>
int array[] = {1, 2, 3, 4, 5, 6, 7};
int my_put(int *array)
{
printf("Size of array %lu\n", sizeof(array));
return 0;
}
int main(int argc, char **argv)
{
printf("Size of array %lu\n", sizeof(array));
my_put(array);
return 0;
}
我的问题是:sizeof函数如何返回两个不同的值?为什么main
函数中的大小为28,my_put
函数中的大小为8?
答案 0 :(得分:5)
因为在my_put()
中,array
是int *
指针,而不是数组。您的参数会影响全局array
变量。如果你重写my_put
看起来像这样可能会更清楚:
int my_put(int *a)
{
printf("Size of array %zu\n", sizeof array);
printf("Size of a %zu\n", sizeof a);
return 0;
}
这个新函数不会混淆两个名为array
的变量。我还修复了它以使用z
类型的size_t
格式说明符。
comp.lang.c FAQ, section 6, Arrays and Pointers还有更多内容,尤其是Question 6.21。
答案 1 :(得分:0)
在my_put名称中,数组被func的arg遮蔽,其大小为8(因为它是指针)。主要是你获得'真实'数组的大小。这就是全部
答案 2 :(得分:0)
在函数my_put
中,array
是指针,其大小为int *
。阅读C-FAQ 6.21。
答案 3 :(得分:0)
因为它的“数组”不一样。这里有两个数组 - 全局变量“array”和参数“array”到my_put
。现在第二个实际上是指向第一个的指针,但它是一个具有不同类型的独特变量(int指针与int数组),因此它具有不同的大小。