c++ - 为什么要在这段代码中使用 void 指针?

标签 c++

#include <iostream>
using namespace std;
int main()
{
    char *pc; 
    int *pi;
    double *pd;

    pc = (char *)10000;         
    pi = (int *)10000;          
    pd = (double *)10000;           
    // 1)
    cout << "before pc = " << (void *)pc << " pi = " << pi << " pd = " << pd << endl;

    pc++;
    pi++;
    pd++;
    // 2)
    cout << "after increase pc = " <<  (void *)pc << " pi = " << pi << " pd = " << pd << endl;

    return 0;
}

在这段代码(1, 2)中,为什么变量 pc 被强制转换为 void 指针?

如果您不打印变量 pc,我正在检查是否不会发生运行时错误。

最佳答案

因为char*使用 cout << something 打印时将尝试打印一个字符串( cout << "Hello, World" << endl; 使用 char * [迂腐,在本例中, const char * ] 表示 "Hello, World" )。

由于您不想在地址 10000 处打印字符串(它很可能会崩溃),因此代码需要做一些事情来避免将指针用作字符串。

所以通过转换为 void*你会得到打印的实际地址,这是一般指针类型的默认值,除了 char * .

关于c++ - 为什么要在这段代码中使用 void 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25969242/

相关文章:

c++ - 我如何使用某种二进制签名识别 WinRAR SFX?

c++ - 使用 extern const 将结构传递给模板。什么是外部?

c++ - 将异步与多态成员函数一起使用

C++在组合字符时给出随机值

c++ - Opencv 3.0 与哪个版本的 FFMPEG?

c++ - 函数声明有什么问题?

c++ - 贪吃蛇游戏——尾部运动

c++ - 如何用C++在cocos2dx中定义非静态方法

c++ - 简单的 "catching"逻辑

c++ - 发送 3 字节数据到 OpenGL GLSL