void* 是一种特殊的指针类型,可用于存放任意对象的地址。一个 void* 指针存放着一个地址,这一点和其他指针类似。

在介绍 void 指针前,简单说一下 void 关键字使用规则:

  • 如果函数没有返回值,那么应声明为 void 类型;
  • 如果函数无参数,那么应声明其参数为 void;(常省略)
  • 如果函数的参数或返回值可以是任意类型指针,那么应声明其类型为 void* ;
  • void 的字面意思是“无类型”,void*则为“无类型指针”,void不能代表一个真实的变量,void体现了一种抽象。

(1)任何类型的指针都可以直接赋值给void指针, 且无需进行强制类型转换。

任何类型的指针都可以直接赋值给void 指针。

double obj = 3.14, *pd = &obj;
void* pv = &obj;        // 正确,void* 能存放任意类型对象的地址// obj 可以是任意类型的对象
pv = pd;                // 正确,pv 可以存放任意类型的指针

(2)void 指针并不能无需类型转黄直接赋值给其他类型

double obj = 3.14, *pd = &obj;
void *pv = &obj;double *pd1 = pv;               // 错误,不可以直接赋值
double *pd2 = (double*)pv;      // 必须进行显示类型转换
cout << *pd2 << endl;           // 3.14

(3)void指针可以直接和其他类型的指针进行比较指针存放的地址值是否相同

double obj = 3.14, *pd = &obj;
void *pv = &obj;double *pd1 = pv;               // 错误,不可以直接赋值
double *pd2 = (double*)pv;      // 必须进行显示类型转换
cout << *pd2 << endl;           // 3.14
cout << (pv == pd2) << endl;    // 1

(4)void指针只有强制类型转换后才可以正常对其操作

我们对该地址中到底是个什么类型的对象并不了解,因此不能直接操作 void* 指针所指的对象,也就无法确定能在这个对象上做哪些操作。

概括来说,以 void* 的视角来看内存空间也就是仅仅是内存空间,没办法访问内存空间中所存的对象,因此只有对其进行恰当的类型转换之后才可以对其进行相应的访问。

也就是说一个 void 指针必须要经过强制类型转换以后才有意义。

double obj = 3.14, *pd = &obj;
void *pv = &obj;cout << *(double*)pv << endl;   // 3.14

(5)void指针变量和普通指针一样可以通过 NULL 或 nullptr 来初始化,表示一个空指针

void *pv = 0;
void *pv2 = NULL;
cout << pv << endl;         // 值为0x0
cout << pv2<< endl;         // 值为0x0

(6)当void指针作为函数的输入和输出时,表示可以接受任意类型的输入指针和输出任意类型的指针

如果函数的参数或返回值可以是任意类型指针,那么应声明其类型为void*

在函数调用过程中的使用 void 指针作为输入输出参数也非常好用,可以灵活使用任意类型的指针,避免只能使用固定类型的指针。

简单示例

#include <iostream>
using namespace std;void GetErrCode(int nCode, void *pOutInfo)
{switch (nCode){case 1:strcpy((char *)pOutInfo,"内存溢出");break;default:break;}}int main()
{static char pOutInfo[100] = {0} ;GetErrCode(1,pOutInfo);cout<<pOutInfo<<endl;return 0;
}

C++ void指针(void *)相关推荐

  1. C语言中的void和void指针-void*,及void指针做函数参数。

    实例: #include <stdio.h> #include <stdlib.h> void print(void * node) {     printf("%d ...

  2. C语言中的void和void指针-void*

    文章目录 void 关键字 void指针的作用 使用方式 void指针与函数 void 关键字 当函数返回值为空时,可以使用void. void empty(int a); 当函数参数列表为空时,可以 ...

  3. void指针(void*):void*存放任意对象的地址、通过(int*)a转换指针类型

    0.void*简介 void*是一种特殊的指针类型,可用于存放任意对象的地址. void *pv =&obj; // obj 可以是任意类型的对象 void指针pv只保存了对象obj的首地址, ...

  4. void指针(void *的用法)

    指针有两个属性:指向变量/对象的地址和长度  但是指针只存储地址,长度则取决于指针的类型  编译器根据指针的类型从指针指向的地址向后寻址  指针类型不同则寻址范围也不同,比如:  int*从指定地址向 ...

  5. C语言指针高级部分:void指针和数据指针

    概念 void指针     数据指针 void指针 void指针的基本概念 void的意思就是"无类型",void指针则为"无类型指针",void指针可以指向任 ...

  6. C++中的空指针和void * 指针

    空指针(null pointer) 空指针不指向任何对象,在使用一个指针前首先要判断是否为空. 用法: int *ptr1=nullptr; //等价于int *ptr1=0; int *ptr2=0 ...

  7. C语言 void和void *(无类型指针)

    void 关键字 void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据. void几乎只有"注释&quo ...

  8. static关键字 void和void指针 函数指针

    static关键字 1.作用于变量:    用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态存储的,即指 ...

  9. C++之指针探究(七):void指针、空指针、野指针、各种零所代表的含义

    前文:C++之指针探究(六):二级指针和数组指针 一.void指针   void指针即通用指针,可以指向任意类型的数据.也就是说,任何类型的指针都可以赋值给void指针.     将任何类型的指针转换 ...

  10. C语言特殊指针——const指针、void指针、NULL指针、零指针、野指针

    const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性 指向常量的指针: const int *pa; int const *pa; 两者等 ...

最新文章

  1. 模糊数学笔记:二、模糊截集与分解定理
  2. react ui框架 移动端_你必须要知道的移动端UI组件设计宝典
  3. 【C语言探索之旅】第三部分第三课:SDL开发游戏之显示图像
  4. 关于restful协议很多人的误解
  5. vue_cli全局变量使用
  6. 华数java 知乎_纠结编程语言的选择?他们为什么都选择了Java?
  7. 2021年美赛准备大全
  8. system/build.prop参数说明
  9. 百度官方的6个SEO建议
  10. 女程序员未来的职场出路在哪里?
  11. FileZilla的下载与安装
  12. Android视频背景,动态背景,Android用视频做背景的轻松实现
  13. 呕心沥血总结的Python自动化测试面试题
  14. C++23种设计模式(22)-中介者模式
  15. 最长子序列(LCS, LIS, LCIS)
  16. cocoscreator 模拟点击
  17. 阿里云域名解析网络和服务架构设计(三) 之阿里云CLB负载均衡
  18. Docker Swarm 创建加密覆盖网络
  19. QT-按下按钮实现页面跳转
  20. GBaseDataStudio 管理工具

热门文章

  1. U盘提示“请将磁盘插入驱动器“ 常见原因及解决方法
  2. 免费一键生成原创文章-原创文章批量生成
  3. 小新15适合学计算机的学生吗,学生党适用笔记本电脑排行,最适合学生的笔记本电脑推荐...
  4. Jetson TX1开发笔记(一):开机设置与刷机
  5. 青橙商城day10-es
  6. 怎么进行服务器性能监控,有什么监控工具
  7. UIAutomation---IOS自动化测试的工具
  8. 劳动仲裁申请先予执行的规则是怎样的
  9. 【web】特效 阴影(用法+例子)
  10. 同等学力是什么意思?