c++无类型指针(void pointers)

void 指针,就是所谓的通用指针。它是一种特殊的指针,可以指向任意类型的对象。void指针的声明就像普通的指针一样:

void *pVoid; // pVoid is a void pointer

void指针可以指向任意类型的对象:

int nValue;
float fValue;
 
struct Something
{
    int nValue;
    float fValue;
};
 
Something sValue;
 
void *pVoid;
pVoid = &nValue; // valid
pVoid = &fValue; // valid
pVoid = &sValue; // valid

但是,void指针并不知道它所指向的具体类型,所以它不能直接拿来引用。如果要引用它,就必须明确把void指针转换成特定类型的指针。

int nValue = 5;
void *pVoid = &nValue;
 
// can not dereference pVoid because it is a void pointer
 
int *pInt = static_cast<int*>(pVoid); // cast from void* to int*
 
cout << *pInt << endl; // can dereference pInt

也就是说,当我们引用void指针时候,必须给出特定的引用类型。具体引用什么类型呢?这就要靠我们写程序的时候自己跟踪定义了。

#include <iostream>
 
enum Type
{
    INT,
    FLOAT,
    STRING,
};
 
void Print(void *pValue, Type eType)
{
    using namespace std;
    switch (eType)
    {
        case INT:
            cout << *static_cast<int*>(pValue) << endl;
            break;
        case FLOAT:
            cout << *static_cast<float*>(pValue) << endl;
            break;
        case STRING:
            cout << static_cast<char*>(pValue) << endl;
            break;
    }
}
 
int main()
{
    int nValue = 5;
    float fValue = 7.5;
    char *szValue = "Mollie";
 
    Print(&nValue, INT);
    Print(&fValue, FLOAT);
    Print(szValue, STRING);
    return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值