我的理解是数组只是指向一系列值的常量指针,当你在C中声明一个数组时,你就是声明一个指针并为它所指向的序列分配空间.
但这让我感到困惑:以下代码:
char y[20];
char *z = y;
printf("y size is %lu\n", sizeof(y));
printf("y is %p\n", y);
printf("z size is %lu\n", sizeof(z));
printf("z is %p\n", z);
Run Code Online (Sandbox Code Playgroud)
使用Apple GCC编译时会得到以下结果:
y size is 20
y is 0x7fff5fbff930
z size is 8
z is 0x7fff5fbff930
Run Code Online (Sandbox Code Playgroud)
(我的机器是64位,指针长8个字节).
如果'y'是常量指针,为什么它的大小为20,就像它指向的值序列一样?变量名'y'是否在编译时被内存地址替换为适当的?那么数组是C中的某种语法糖,它在编译时只是转换为指针的东西吗?
如果要处理命令行参数,可以main像下面一样定义函数.
int main(int argc, char **argv) { ... }
Run Code Online (Sandbox Code Playgroud)
要么
int main(int argc, char *argv[]) { ... }
Run Code Online (Sandbox Code Playgroud)
在许多网站中,解释了第一个argv是指向指针的指针,第二个是指针数组.但是,这是真的吗?实际上,即使你使用第二个定义,你也可以设置argv为=运算符的LHS,如果argv真的是数组,我认为是不允许的.在我看来,"当作为函数的参数写的",char **argv并且char *argv[]是完全平等的.但是,我还没有找到证据.
谁能帮助我?(我想要的是严格或正式书面证据.)
注意:我已经阅读了下面的主题.我相信我的帖子不是他们的副本.