博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer 学习笔记与思考_7 void和void*指针的使用方法
阅读量:7201 次
发布时间:2019-06-29

本文共 1091 字,大约阅读时间需要 3 分钟。

(一)void的含义
void的字面意思是“无类型”,void差点儿仅仅有“凝视”和限制程序的作用,由于从来没有人会定义一个void变量,让我们试着来定义:
void a;
这行语句编译时会出错。提示“illegal use of type 'void'”。只是。即使void a的编译不会出错。它也没有不论什么实际意义。
void真正发挥的作用在于:
(1) 对函数返回的限定;

(2) 对函数參数的限定。

int f(void); equal to   int f();void f();

(二)void*指针

C++提供了一种特殊的指针类型void*,它能够保存不论什么类型对象的地址。void*表明该指针与一地址值相关,可是不清楚在此地址上的对象的类型。

Void*指针仅仅支持几种有限的操作:

1.与还有一个指针进行比較
2.向函数传递void*指针或从函数中返回void*指针
3.给还有一个void*指针赋值
4.不同意使用void*指针操纵它指向的对象
因为其它指针都包括有地址信息。所以将其它指针的值赋给空类型指针是合法的。反之,将空类型指针赋给其它指针则不被同意,除非进行显式转换。

因此。void*的作用大致例如以下:
1. 传參:通用类型
能够作为函数模板。链表等參数的通用參数。

在使用时,仅仅须要强制类型转换就能够。

在WinSocket编程中。_beginthread()函数的參数就是使用void*的一个实例。
2.强制类型转换
有时候因为重载等的干扰,导致须要转换成void *,来进行取地址。

比如,(void *)obj.member。就能够取到member的地址;直接&(obj.member)取到的实际上是obj的開始地址。
3.指向0的地址
(void *)0,指向全是0的地址。相当于NULL。
非void类型显式转换为void类型表达式,用于避免一些代码静态检查工具的警告。

#include
#include
using namespace std;int main(){ double obj=3.14; int a=7; double *pd=&obj; void *pv=&obj; //ok pv=&a; //ok (*pv)++; // error,不得操纵对象 int *ptr=&a; void *p=ptr; //ok ptr=p; //error,不能将空类型指针赋给其它指针 ptr=(int*)p; //ok,显式转换 return 0;}

转载地址:http://ekzum.baihongyu.com/

你可能感兴趣的文章
centos6.5
查看>>
log4j2初遇
查看>>
java配置方式
查看>>
apache和php、mysql的整合
查看>>
linux下磁盘多路径
查看>>
安装完oracle9i 运行netca dbca 报错
查看>>
mvc 当前上下文中不存在名称“ViewBag” 或ViewData
查看>>
AndroidStudio中使用Android.mk
查看>>
YII2.0 高级模板-添加自定义模板
查看>>
Cisco 思科网络设备模拟器 GNS3 使用指南
查看>>
Android版添加phonegap--百度api定位插件教程
查看>>
arm c中字节对齐
查看>>
51cto我来了
查看>>
Linux的Web服务基础概念
查看>>
LNMP搭建
查看>>
RecyclerView的基础使用
查看>>
nginx学习笔记
查看>>
安装PHP扩展eaccelerator加速器
查看>>
SVN 学习
查看>>
SmartSVN设置ignoreList
查看>>