相关疑难解决方法(0)

在C中,是数组指针还是用作指针?

我的理解是数组只是指向一系列值的常量指针,当你在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中的某种语法糖,它在编译时只是转换为指针的东西吗?

c arrays pointers

45
推荐指数
3
解决办法
1万
查看次数

'char*args []'和'char**argv'之间的区别作为参数

如果要处理命令行参数,可以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[]是完全平等的.但是,我还没有找到证据.

谁能帮助我?(我想要的是严格或正式书面证据.)


注意:我已经阅读了下面的主题.我相信我的帖子不是他们的副本.

char**x和char*x []之间的区别是什么

在C中,是数组指针还是用作指针?

c c++

0
推荐指数
1
解决办法
729
查看次数

标签 统计

c ×2

arrays ×1

c++ ×1

pointers ×1