远去的家园 2022-02-07 06:44 采纳率: 100%
浏览 83
已结题

C语言数组名到底是个什么样的“常量”?

书上说,数组名是个指针常量,指向数组首元素的地址。于是我做了个实验:

#include <stdio.h>

int main(void)
{
    int a[3] = {1, 2, 3};

    printf("%p  %p  %p", &a, a, &a[0]);

    return 0;
}

运行结果如下:

000000000061FE14  000000000061FE14  000000000061FE14

疑惑来了:

  1. 数组名作为常量,怎能用&求出其保存地址呢?难道是常量表达式?

2.就算是常量表达式,那么它指向的地址怎么和保存自身的地址相等呢?

当然,数组怎么用我会,研究这个有点较真了,但还是希望专家答疑解惑。

  • 写回答

3条回答 默认 最新

  • 秦时小 2022-02-07 06:52
    关注

    数组名前边加&已经不是普通的取地址符了。虽然值一样,但编译器对a+1和&a+1的处理是不一样的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    远去的家园 2022-02-07 06:56

    能展开讲解一下吗?或者有没有参考资料?我研究研究。谢谢!!

    回复
    秦时小 回复 远去的家园 2022-02-07 06:59

    https://blog.csdn.net/loongkingwhat/article/details/78910921,可以看下这个链接

    1
    回复
    远去的家园 回复 秦时小 2022-02-07 07:08

    &a数值上等于整个数组的起始位置地址,含义上代表整个数组所占内存的大小,
    因为它的进阶单位是整个数组的字节长度
    

    书里没提到,难怪了,我懂了谢谢!!

    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月10日
  • 已采纳回答 2月7日
  • 创建了问题 2月7日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部