nic*_*ick 4 c++ iostream cout memory-address
我想知道程序在运行时在内存方面的作用,因为它遇到以下情况:
char chr = 'a';
char chrS[] = "a";
cout << "Address: " << &chr << endl;
cout << "Address: " << &chrS << endl;
Run Code Online (Sandbox Code Playgroud)
这产生以下结果:
Address: a?c?3?
Address: 0x7fff33936280
Run Code Online (Sandbox Code Playgroud)
为什么我不能得到"chr"的内存地址?
Pup*_*ppy 12
因为&chr产生一个char*(const这里隐式添加)并cout假设它是一个字符串,因此null终止,但它不是.
然而,&chrS产生a char(*)[],它不会衰减到a const char*,因此将通过operator<<(std::ostream&, const void*)重载输出,从而输出地址.
如果您想要这种行为,const char*则必须执行显式转换.C字符串和指向单个字符的指针之间没有区别这一事实是C字符串的主要缺陷之一.