为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C C++
临摹微笑 2019-07-02 10:30:29
在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中的某种语法糖,在编译时只被翻译成指针呢?
查看完整描述

3 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

sizeof在编译时计算,编译器知道操作数是数组还是指针。对于数组,它提供数组占用的字节数。数组是char[](和sizeof(char)是1),因此sizeof正好给出了元素的数量。为了在一般情况下得到元素的数量,一个常见的成语是int):

int y[20];printf("number of elements in y is %lu\n", sizeof(y) / sizeof(int));

为指针sizeof提供原始指针类型占用的字节数。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 450 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信