uflyjz 2021-07-17 09: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 09:22
    关注

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

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

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

报告相同问题?

问题事件

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