4

我想知道程序在运行时在内存方面做了什么,因为它遇到了以下情况:

char chr = 'a';
char chrS[] = "a";
cout << "Address: " << &chr << endl;
cout << "Address: " << &chrS << endl;

这会产生以下结果:

Address: a�c�3�
Address: 0x7fff33936280

为什么我不能得到“chr”的内存地址?

4

2 回答 2

12

因为&chr产生一个char*const这里的隐式添加)并cout假设它是一个字符串,因此以 null 结尾,但事实并非如此。

但是,&chrS产生 a char(*)[],它不会衰减到 a const char*,因此将通过operator<<(std::ostream&, const void*)打印地址的重载输出。

如果您想要这种行为,const char*则必须执行显式强制转换。C 字符串和指向单个字符的指针之间没有区别这一事实是 C 字符串的主要缺陷之一。

于 2012-08-18T03:33:03.617 回答
0

尝试

cout << "Address: " << hex << (long)(&chr) << endl;

否则,当它获得指向 char 的指针时,它认为您正在给它一个字符串并尝试将其打印为一个字符串。

于 2012-08-18T03:35:46.487 回答