You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何两个C++指针数组输出的内存地址不同?

问题解释:两个数组地址不同的原因

你混淆了数组自身的地址和数组元素指向的字符串地址,这是两个完全不同的概念:

  1. s和s1是两个独立的栈变量
    const char *s[]和char *s1[]是在main函数栈帧里声明的两个不同数组变量,编译器会为它们分配各自独立的栈内存空间,所以它们的起始地址(也就是你直接cout << s和cout << s1输出的内容)必然不同。你看到的0x6ffde0和0x6ffdb0就是这两个数组在栈上的起始位置。

  2. 数组元素指向的是同一个字符串字面量
    字符串字面量(比如"flower")会被编译器放在程序的只读数据段,而且相同内容的字符串字面量会被合并成一个实例节省空间。所以不管是用const char*指向它,还是强制转成char*指向它,最终指向的都是同一个只读内存地址,这就是你测试"flower"和(char*)"flower"地址一致的原因。

验证方法

如果输出数组里的元素地址,你会发现对应位置的指针指向的是同一个字符串:

cout << (void*)s[0] << endl;  // 和下面的输出相同
cout << (void*)s1[0] << endl;

内容的提问来源于stack exchange,提问作者Mark_Phys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:30:00