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日

悬赏问题

  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗