我想知道程序在运行时在内存方面的作用,因为它遇到以下情况:
char chr = 'a';
char chrS[] = "a";
cout << "Address: " << &chr << endl;
cout << "Address: " << &chrS << endl;
这会产生以下结果:
Address: a�c�3�
Address: 0x7fff33936280
为什么我不能获得“chr”的内存地址?
答案 0 :(得分:12)
因为&chr
产生char*
(这里隐式添加const
)而cout
假定它是一个字符串,因此无效终止,而不是。< / p>
但是,&chrS
会产生一个char(*)[]
,它不会衰减到const char*
,因此会通过operator<<(std::ostream&, const void*)
重载输出,从而输出地址。
如果您想要const char*
的此行为,则必须执行显式转换。 C字符串和指向单个字符的指针之间没有区别这一事实是C字符串的主要缺陷之一。
答案 1 :(得分:0)
尝试
cout << "Address: " << hex << (long)(&chr) << endl;
否则,当它获取指向char的指针时,它会认为你给它一个字符串并尝试将其打印为一个字符串。