0

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

#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 函数会返回两个不同的值?为什么函数里的size是28,main函数里是8 my_put

4

4 回答 4

5

因为 in 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 常见问题解答第 6 节,数组和指针中提供更多信息,特别是针对您的案例的问题 6.21 。

于 2013-11-06T23:09:36.633 回答
0

在 my_put name数组中,你的 func 的 arg 会影响它的大小,它的大小是 8(因为它是一个指针)。主要是你得到你的“真实”数组的大小。就这样

于 2013-11-06T23:10:39.310 回答
0

在函数my_put中,array是指针,它的大小是int *. 阅读C-FAQ 6.21

于 2013-11-06T23:10:44.237 回答
0

因为它不是同一个“数组”。这里有两个数组——全局变量“array”和参数“array” my_put。现在第二个实际上是指向第一个的指针,但它是一个具有不同类型的不同变量(int 指针与 int 数组),因此它具有不同的大小。

于 2013-11-06T23:16:21.977 回答