为什么sizeof函数为同一个数组返回不同的值?

时间:2013-11-06 23:07:59

标签: c arrays sizeof

考虑这段代码(或者只是复制/粘贴并运行它):

#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?

4 个答案:

答案 0 :(得分:5)

因为在my_put()中,arrayint *指针,而不是数组。您的参数会影响全局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数组),因此它具有不同的大小。