【问题标题】:Why does my pointer output a string and not a memory address in C++? [duplicate]为什么我的指针在 C++ 中输出的是字符串而不是内存地址? [复制]
【发布时间】:2011-10-17 01:38:01
【问题描述】:

我正在研究一个使用指针的字符串类,我只是在理解我的print 函数在这里的工作原理方面遇到了一些困难。具体来说,为什么cout << pString 输出的是字符串而不是它所指向的动态数组的内存地址?我的理解是变量 pString 是一个指针。

class MyString
{
    public:
        MyString(const char *inString);
        void print();
    private:
        char *pString;
};


MyString::MyString(const char *inString)
{
    pString = new char[strlen(inString) + 1];
    strcpy(pString, inString);
}

void MyString::print()
{
    cout << pString;
}

int main( )
{
    MyString stringy = MyString("hello");
    stringy.print();
    return 0;
}

【问题讨论】:

    标签: c++ pointers dynamic-arrays


    【解决方案1】:

    这是因为 &lt;&lt; 运算符已被重载以处理 char* 的情况并将其作为字符串打印出来。与地址相反(其他指针就是这种情况)。

    我认为可以肯定地说这样做是为了方便 - 使打印字符串变得容易。

    所以如果你想打印出地址,你应该将指针转换为void*

    【讨论】:

      【解决方案2】:

      变量pString 一个指针。但是,&lt;&lt; 与输出流一起使用时的实现知道,如果您尝试输出 char *,则输出应打印为以空字符结尾的字符串。

      试试:

      cout << static_cast<void *>(pString);
      

      【讨论】:

        【解决方案3】:

        这是因为“

        #include <stdio.h>
        #include <stdlib.h>
        
        int main(int argc,char** argv)
        {
            char string1[] = "lololololol";
            char* string2;
        
            string2 = string1;
        
            printf("%s",string2);
            printf("%p",string2);
        
            return EXIT_SUCCESS;
        }
        

        您可以在这里看到 %s 打印出字符串,而 %p 打印出内存地址。

        【讨论】:

        • 但仅适用于 char* 和 wchar_t* 类型,不适用于所有指针。
        猜你喜欢
        • 2020-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-07
        • 1970-01-01
        • 2022-01-01
        • 2016-03-13
        相关资源
        最近更新 更多