为什么c++ 中 指针数组 打印的不是地址而是字符串??
#include <iostream>
using namespace std;
int main(){
char *str[3] = {"banana", "apple", "origin"};
for(int i=0, i<3,++i) {
cout << str[i] << endl;
}
return 0;
}
运行结果:
banana
apple
origin
所以为什么输出的是字符串呢,指针数组 str中的元素 不应该存放的是 地址嘛?
其实这个问题也可以转换为:为什么可以这样赋值 : char *str[3] = {"banana", "apple", "origin"};
关键是这样赋值之后还能输出?
补充一下,如果是一个 int类型的 指针数组 ,输出的结果我倒是能理解。
#include <iostream>
using namespace std;
int main(){
int *ptr[3];
int array_1[3] = {1, 8, 10};
int array_2[2] = {12, 15};
int array_3[4] = {11, 22, 33, 44};
ptr[0] = array_1;
ptr[1] = array_2;
ptr[2] = array_3;
for(int i=0, i<3,++i) {
cout << ptr[i] << endl;
}
return 0;
}
运行结果:
0x61fda4
0x61fd9c
0x61fd80
“Devil组”引证GPT后的撰写:
如果你想打印指针本身的地址,可以使用取地址符(&),例如 cout << &str[i]。
输出中str[]都没有写i,能实现你贴出的输出效果???
字符指针直接输出就是按字符串输出的。输出地址的话,你要取地址才行。这是规则。否则啥时候输出字符串呢???
gdb 时,发现str[0] 0x405029 std::piecewise_construct+41 "banana" ,可能和 cout 调用 分段构造函数有关系? 这块不太懂,后边搞懂这些构造函数回头再来看吧。