C++中void和void*指针的含义 (指针类型的含义)
生活随笔
收集整理的这篇文章主要介绍了
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*指针的含义 (指针类型的含义)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Unity整合TortoiseSVN
- 下一篇: 一分钟读懂互联网广告竞价策略GFP+GS