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

use*_*316 0 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;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:sizeof函数如何返回两个不同的值?为什么函数中的大小为28,main函数中的大小为8 my_put

Car*_*rum 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;
}
Run Code Online (Sandbox Code Playgroud)

这个新函数不会混淆两个名为的变量array.我还修复了它以使用类型的z格式说明符size_t.

还有更多关于comp.lang.c常见问题解答,第6节,数组和指针,特别是问题6.21.