转载自:http://blog.csdn.net/lee_shuai

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

int*从指定地址向后寻找4字节作为变量的存储单元
double*从指定地址向后寻找8字节作为变量的存储单元

void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。

1  void的作用

1)   对函数返回的限定

a)  当函数不需要返回值时,必须使用void限定。例如: voidfunc(int, int);

2)   对函数参数的限定

a)  当函数不允许接受参数时,必须使用void限定。例如: intfunc(void)。

2  void* 指针意义
2.1   void类型指针可以指向任意类型的数据,即可用任意数据类型的指针对void指针赋值。

int *pint;
void *pvoid; //它没有类型,或者说这个类型不能判断出指向对象的长度
pvoid = pint; //只获得变量/对象地址而不获得大小,但是不能 pint =pvoid;

2.2   如果要将pvoid赋给其他类型指针,则需要强制类型转换如:

pint = (int *)pvoid;  //转换类型也就是获得指向变量/对象大小

2.3   void指针不能解引用(即取内容的意思)

*pvoid        //错误

要想解引用一个指针,或者使用“->”运算符复引用一部分,都要有对于指针指向的内存的解释规则。反过来例如,int *p;那么,当你后面解引用p的时候,编译器就会把从p指向的首地址开始的四个字节看作一个整数的补码。因为void指针只知道指向变量/对象的起始地址,而不知道指向变量/对象的大小(占几个字节)所以无法正确引用

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

典型的如内存操作函数memcpy和memset的函数原型分别为:

void*memcpy(void* dest,const void* src, size_t len);
void*memset(void*buffer,intc,size_tnum);

这样,任何类型的指针都可以传入memcpy和memset中,这也真实地体现了内存操作函数的意义,因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型。如果 memcpy和memset的参数类型不是void*,而是char*,那是不具有普遍适用性的

转载于:https://www.cnblogs.com/clemente/p/10905335.html

C++中void和void*指针的含义 (指针类型的含义)相关推荐

  1. c++中的void指针和const指针

    在c++中可以声明指向void类型的指针,指向void类型的指针称为void指针,此外,在声明指针时,还可以用关键字const进行修饰,用关键字const修饰的指针称为const指针. 1.void指 ...

  2. void及void指针含义的深刻解析

    void的含义 void即"无类型",void *则为"无类型指针",可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可 ...

  3. C/C++语言void及void指针深层探索。C中void是什么意思? 为什么有时可用可不用?

    C/C++语言void及void指针深层探索.C中void是什么意思? 为什么有时可用可不用? 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误. ...

  4. [转]C/C++语言void及void指针深层探索

    1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧. 2 ...

  5. C/C++语言void及void指针深层探索 .

    1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧. 2 ...

  6. 【转】void及void指针的深刻解析

    void的含义 void即"无类型" ,void*则为"无类型指针",可以指向任何数据类型,所以又叫做"通用指针". void指针使用规范 ...

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

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

  8. C/C++语言void及void指针深层探索

    1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧. 2 ...

  9. C语言中的void 和void 指针类型

    C语言中的void 和void 指针类型 C语言, void, void指针 许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和 ...

最新文章

  1. ASP.NET弹出窗口技术之增加网站流量方法
  2. LeetCode 206 Reverse Linked List--反转链表--迭代与递归解法--递归使用一个临时变量,迭代使用3个
  3. 55.npm install 报错 :stack Error: Can't find Python executable python
  4. Google Map API 学习六-设置infoWindow的长宽
  5. python syntaxerror怎么解决-python中出现invalid syntax报错的几种原因
  6. oracle ipc message,【案例】Oracle RAC IPC send timeout error导致RAC的节点挂起解决办法
  7. Java 9 中的 GC 调优基础
  8. javascript计算小数保留两位小数,多位小数的方法
  9. 营销获客场景下的工具类产品规划
  10. mpvue返回上一个页面_Mpvue+Vant-Weapp开发小程序遇坑之解决系列
  11. android tabhost的使用方法,android TabHost(选项卡)的使用方法
  12. Mirantis决定采用Kubernetes作为 Openstack的生命周期管理工具
  13. wxpython窗口固定大小_调整wxPython窗口的大小
  14. celery 4.1下报kombu.exceptions.EncodeError: Object of type 'bytes' is not JSON serializable 处理方式...
  15. MySQL数据库选型
  16. 玩转二叉链表 (20 分)
  17. AutoCAD2015 下载安装教程与使用技巧(已测有效)
  18. qq空间显示手机型号android,qq空间如何设置显示手机型号
  19. 基于android的音乐APP大作业和设计指导项目
  20. 配置Atari Gym环境

热门文章

  1. mysql索和使用引的创建_MySQL索引的创建与使用
  2. Socket网络通讯开发总结之:Java 与 C进行Socket通讯
  3. android中判断sim卡状态和读取联系人资料的方法
  4. java中输出时间12小时制转换为24小时制显示
  5. c 语言中浮点数舍入,浮点数在C中舍入,我不明白为什么
  6. discuz论坛 java,如何添加Discuz论坛的应用
  7. python统计学书籍推荐_一位90后统计学硕士的深悟:统计其实有门道!AI还能这样学!(精荐40本书+20视频资源...
  8. 大数据python试卷_大数据起步--Python语言-中国大学mooc-试题题目及答案
  9. ora-01740: 标识符中缺失双引号_sql语句中单引号的使用
  10. 阿里云mysql写入性能_插入mysql类型