好文档 - 专业文书写作范文服务资料分享网站

浅谈void及void指针

天下 分享 时间: 加入收藏 我要投稿 点赞

浅谈void及void指针

在编程的过程中,大家都很熟悉void,但是对于void指针恐怕就没有那么熟悉吧,今天我在这里进行一些浅谈,希望对各位朋友有一定的帮助。

首先我们要知道数据类型,什么是数据类型,可以理解为一种数据的结构,每种数据类型都有相应的数据结构,既然是结构那么就有相应的结构信息,包括在内存中占有多少字节等等的东西。

内存是连续的,我们通常都说电脑的内存是2G,那么内存是在电脑出厂或者内存条出厂的时候就制定了每一个内存单元的标识的,内存是由内存单元组成的,一个内存单元我们通常是用一个字节来描述的,内存单元是由电荷位组成的,也就是说一个内存单元是由8个电位组成的,不要问我为什么是8个,我也不知道,呵呵。

好了,知道了内存单元,那么我们就能够知道数据类型的具体东西了,通常我们说一个int类型的变量占有4个字节,也就是说我们定义了一个变量那么它在内存里面是占有连续的4个字节。

好了,终于到了主题,那么void是什么数据类型呢,我的理解为未知的数据类型,这里的未知是指不知道在内存中占有多少字节,因此编译器在编译的过程中也就不能为其分配内存,所以我们就不能定义void类型的变量,那么void指针又是怎么回事呢?

首先明白,指针是存放对象地址(当对象占有多个字节的时候,存放的是第一个字节的地址)对象,而CPU就根据这个指针对象所存放的地址去进行一些操作,由于CPU是32位的,也就是我们通常说的32位机,那么CPU的寻址范围就是2的32次方,也就是4G的地址空间,而内存又只有2G,所以为了不浪费CPU的寻址能力,操作系统就提供了一种虚拟内存。(扯远了)

好了,CPU能够寻找2的32次方的地址空间,而一个字节只有8位,那么4个字节刚好能够把CPU所有的寻址空间都能够表述出来,因此所有的指针都是4个字节。那么为什么我们平时还在定义不同数据类型的指针呢,可以直接定义一个数据指针就解决了我所有问题啊!你很聪明,不过设计C++语言的人比我们更聪明,如果我们都用一种数据类型来表示我们的地址,那么当一个int类型的变量的第一个字节的地址被保存到指针变量中的时候和一个char类型的变量的地址被保存到指针变量中的时候我们怎么知道是char类型的地址还是int

类型的地址呢,因此指针变量包含了一个信息就是这个变量描述的地址应该是几个字节连续的,比如说我们定义了一个int类型的指针,那么指针变量知道这个地址是后面三个字节都是连续的,因此不能分开,是一个整体。好了现在问题有出现了,如果说我有一种数据类型,不知道它占有多少内存空间,但是我希望能够通过指针来操作它,怎么办,void指针出现了,void指针就是描述的不知道这个地址后面应该有多少字节进行连续,因此我们可以定义void指针。

Void指针的用处都是在传递参数的时候,比如我定义了一个线程,但是我需要跟线程传递参数,但是在不同的情况下,线程的参数肯定不一样,那怎么办呢,好,我定义一个结构体或者类,把所有的参数都封装到结构体里面,然后定义一个结构体对象或者类对象,然后把结构体对象或者类对象的地址通过转化传递个线程处理函数,到线程处理函数里面在把指针变量进行转化回来,这样就解决了问题,这样还可以在参数里面进行线程返回信息,比如我有一个线程是计算,那么通过这样的方法就可以把计算的结果传递到线程处理函数的外面,这个可以算是c++比java优秀的地方,java里面只有通过全局变量或者成员变量,而C++可以直接通过指针就解决了问题。当然这个也是c++比java难的地方。

总之,void是未知的,因此不能定义void变量,void指针是说不知道这个地址后面多少是连续的,但是指针本身的大小是4个字节,因此可以定义void指针。

浅谈void及void指针

浅谈void及void指针在编程的过程中,大家都很熟悉void,但是对于void指针恐怕就没有那么熟悉吧,今天我在这里进行一些浅谈,希望对各位朋友有一定的帮助。首先我们要知道数据类型,什么是数据类型,可以理解为一种数据的结构,每种数据类型都有相应的数据结构,既然是结构那么就有相应的结构信息,包括在内存中占有多少字节等等的东西。内存是连续的,我们
推荐度:
点击下载文档文档为doc格式
1cctb8pv5q5nrap1skmf
领取福利

微信扫码领取福利

微信扫码分享