uflyjz 2021-07-17 17:08 采纳率: 83.3%
浏览 41
已采纳

为何字符串数组名取地址后得到的是自身的值?

刚学指针,有个关字符串指针和字符数组的困惑。

代码如下:

char a[] = {"hello"};
printf(" a:%p\n", a);
printf("&a:%p\n", &a);

char *b = {"world"};
printf(" b:%p\n", b);
printf("&b:%p\n", &b);

输出:

 a:0x7ffeed6516e6
&a:0x7ffeed6516e6
 b:0x1025b1fa2
&b:0x7ffeed6516d8

疑问:
对于b,编译系统在内存常量区分配“world”,在内存变量区分配指针型存储空间,用于存放b,且b指向‘w‘。
对于a,我就不能理解了。编译系统在内存变量区分配“hello”,并且a应该为指针常量,其值为'h'的地址,指向字符'h'。(我以为)a作为一个常量,难道不应该存储在内存常量区吗?为啥它取地址后不是某个常量区的位置,而竟然是它的值?是不是编译系统并未在内存常量区开辟空间存放a?我使用a时,究竟使用的是什么?

  • 写回答

1条回答 默认 最新

  • 砻谷踏碓 2021-07-17 17:22
    关注

    记住一点:数组名称本身就是指针,加不加&都是取地址值

    对于*b 没加&指向 存放"world"的内存地址,加&指向b这个指针变量的内存地址

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月18日
  • 创建了问题 7月17日

悬赏问题

  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败