所以我们在C ++类中有一个赋值来创建一个指向char的指针,指令是:
对于每个声明,请确保:
将指针初始化为适当的地址值
显示指针的内容(将此值与指向的地址匹配)
显示指针指向的内容(将此值与原始内容匹配)
每当我尝试用& a显示char a的地址时,它只输出存储在char a中的值而不是地址。当我用整数尝试它时,它就像我想要的那样。
有人可以告诉我我做错了什么吗?
#include <iostream>
using namespace std;
int main()
{
// Question 1, Part I
// (a)
char a = 'A';
char * pa = &a;
//(b)
cout << "Address of a = " << &a << endl;
cout << "Contents of pa = " << pa << endl;
//(c)
cout << "Contents of a = "<< a << endl;
cout << "What pa points to = "<< *pa << endl;
return 0;
}
编辑&amp;运行
答案 0 :(得分:1)
当你给cout指向char时,它会将它视为一个空终止的c字符串。
将其重新转换为无效指针:
cout << "Address of a = " << static_cast<void*>(&a) << endl;
该标准保证第4.10 / 2节中的地址不变:
类型为“指向cv T的指针”的prvalue,其中T是对象类型,可以是 转换为“指向cv void的指针”类型的prvalue。的结果 将指针的非空指针值转换为对象类型 “指向cv void的指针”表示内存中相同字节的地址 作为原始指针值。
这里有关于pointer to char in output streams的解释。这里解释了显示void*
causes the value of the pointer的原因。
答案 1 :(得分:-1)
更改这些陈述
cout << "Address of a = " << &a << endl;
cout << "Contents of pa = " << pa << endl;
到
cout << "Address of a = " << ( void * )&a << endl;
cout << "Contents of pa = " << ( void * )pa << endl;
或
cout << "Address of a = " << reinterpret_cast<void *>( &a ) << endl;
cout << "Contents of pa = " << reinterpret_cast<void *>( pa ) << endl;
或
cout << "Address of a = " << static_cast<void *>( &a ) << endl;
cout << "Contents of pa = " << static_cast<void *>( pa ) << endl;
这三种变体都可以使用。