C++中void和void*指针的含义 (指针类型的含义)
转载自: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*指针的含义 (指针类型的含义)相关推荐
- c++中的void指针和const指针
在c++中可以声明指向void类型的指针,指向void类型的指针称为void指针,此外,在声明指针时,还可以用关键字const进行修饰,用关键字const修饰的指针称为const指针. 1.void指 ...
- void及void指针含义的深刻解析
void的含义 void即"无类型",void *则为"无类型指针",可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可 ...
- C/C++语言void及void指针深层探索。C中void是什么意思? 为什么有时可用可不用?
C/C++语言void及void指针深层探索.C中void是什么意思? 为什么有时可用可不用? 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误. ...
- [转]C/C++语言void及void指针深层探索
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧. 2 ...
- C/C++语言void及void指针深层探索 .
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧. 2 ...
- 【转】void及void指针的深刻解析
void的含义 void即"无类型" ,void*则为"无类型指针",可以指向任何数据类型,所以又叫做"通用指针". void指针使用规范 ...
- static关键字 void和void指针 函数指针
static关键字 1.作用于变量: 用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态存储的,即指 ...
- C/C++语言void及void指针深层探索
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧. 2 ...
- C语言中的void 和void 指针类型
C语言中的void 和void 指针类型 C语言, void, void指针 许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和 ...
最新文章
- ASP.NET弹出窗口技术之增加网站流量方法
- LeetCode 206 Reverse Linked List--反转链表--迭代与递归解法--递归使用一个临时变量,迭代使用3个
- 55.npm install 报错 :stack Error: Can't find Python executable python
- Google Map API 学习六-设置infoWindow的长宽
- python syntaxerror怎么解决-python中出现invalid syntax报错的几种原因
- oracle ipc message,【案例】Oracle RAC IPC send timeout error导致RAC的节点挂起解决办法
- Java 9 中的 GC 调优基础
- javascript计算小数保留两位小数,多位小数的方法
- 营销获客场景下的工具类产品规划
- mpvue返回上一个页面_Mpvue+Vant-Weapp开发小程序遇坑之解决系列
- android tabhost的使用方法,android TabHost(选项卡)的使用方法
- Mirantis决定采用Kubernetes作为 Openstack的生命周期管理工具
- wxpython窗口固定大小_调整wxPython窗口的大小
- celery 4.1下报kombu.exceptions.EncodeError: Object of type 'bytes' is not JSON serializable 处理方式...
- MySQL数据库选型
- 玩转二叉链表 (20 分)
- AutoCAD2015 下载安装教程与使用技巧(已测有效)
- qq空间显示手机型号android,qq空间如何设置显示手机型号
- 基于android的音乐APP大作业和设计指导项目
- 配置Atari Gym环境
热门文章
- mysql索和使用引的创建_MySQL索引的创建与使用
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯
- android中判断sim卡状态和读取联系人资料的方法
- java中输出时间12小时制转换为24小时制显示
- c 语言中浮点数舍入,浮点数在C中舍入,我不明白为什么
- discuz论坛 java,如何添加Discuz论坛的应用
- python统计学书籍推荐_一位90后统计学硕士的深悟:统计其实有门道!AI还能这样学!(精荐40本书+20视频资源...
- 大数据python试卷_大数据起步--Python语言-中国大学mooc-试题题目及答案
- ora-01740: 标识符中缺失双引号_sql语句中单引号的使用
- 阿里云mysql写入性能_插入mysql类型