显示字符的地址

时间:2014-09-15 17:59:43

标签: c++ pointers reference char

所以我们在C ++类中有一个赋值来创建一个指向char的指针,指令是:

对于每个声明,请确保:

  1. 将指针初始化为适当的地址值

  2. 显示指针的内容(将此值与指向的地址匹配)

  3. 显示指针指向的内容(将此值与原始内容匹配)

  4. 每当我尝试用& 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;运行

2 个答案:

答案 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;   

这三种变体都可以使用。