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

在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);

当使用Apple编译时,GCC给出了如下结果:

y size is 20y is 0x7fff5fbff930z size is 8z is 0x7fff5fbff930

(我的机器是64位,指针是8字节长)。

如果‘y’是一个常量指针,为什么它的大小为20,就像它所指向的值序列一样?在编译时,变量名‘y’是否被内存地址所取代?那么,数组是否是C中的某种语法糖,在编译时只被翻译成指针呢?


临摹微笑
浏览 451回答 3
3回答

动漫人物

sizeof在编译时计算,编译器知道操作数是数组还是指针。对于数组,它提供数组占用的字节数。数组是char[](和sizeof(char)是1),因此sizeof正好给出了元素的数量。为了在一般情况下得到元素的数量,一个常见的成语是int):int y[20];printf("number of elements in y is %lu\n", sizeof(y) / sizeof(int));为指针sizeof提供原始指针类型占用的字节数。
打开App,查看更多内容
随时随地看视频慕课网APP