考虑这段代码(或者只是复制/粘贴并运行它):
#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?
因为在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.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |