我正在学习c++
并遇到了这个问题:
#include<iostream>
using namespace std;
int main(){
const char *a[] = {"ge","hy"};
cout<<a<<" "<<&a[1]<<endl;
cout<<a[0]<<" "<<a[1];
return 0;
}
输出为:
0x7fff54e71830 0x7fff54e71838
ge hy
我试图理解代码。
这是我的理解:
a
是一个array
字符指针,这意味着数组的每个元素都是一个char
指针。
现在,由于每个元素都是一个指针,因此它应该分别存储“ ge”和“ hy”的地址。
-----------------------------------
a = | 0x7fff54e71830 | 0x7fff54e71838 |
-----------------------------------
现在,当我写a[0]
和a[1]
时,为什么要打印ge hy
而不是它们的内存地址,因为数组a
会存储它们的地址而不是它们的地址实际值。
我肯定我会在某个地方出错,因为输出与预期不符。请在这里纠正我。
答案 0 :(得分:3)
标准库提供了一个重载的operator<<(std::ostream&, const char*)
来打印C样式的字符串,该字符串将打印所指向的字符串而不是指针本身的值。该重载比operator<<(std::ostream&, void*)
重载(打印存储在指针中的地址)更好。
如果要打印指针的值,请将强制类型转换添加到void*
:
std::cout << static_cast<void*>(a[0]) << ' ' << static_cast<void*>(a[1]) << '\n';