void*的含义以及作用

指针是一个地址,有两个属性,一个是起始地址,一个是长度,起始地址告诉编译器从哪里开始寻址,地址长度由编译器根据指针所指对象的类型进行推断,如int占4字节,double占8字节。int从指定地址向后寻找4字节作为变量的存储单元 。double从指定地址向后寻找8字节作为变量的存储单元
这里补充一点:不同类型的指针+1跳过的字节数是不同的。

1.void指针是一种特别的指针

   void *vp 

   //说它特别是因为它没有类型 
   //或者说这个类型不能判断出指向对象的长度 

2.任何指针都可以赋值给void指针

   type *p; 
   vp=p; 

   //不需转换 
   //只获得变量/对象地址而不获得大小 

3.void指针赋值给其他类型的指针时都要进行转换

   type *p=(type*)vp; 
   //转换类型也就是获得指向变量/对象大小 

4.void指针不能解引用

   *vp//错误 
   因为void指针只知道,指向变量/对象的起始地址 
   而不知道指向变量/对象的大小(占几个字节)所以无法正确引用 

下面讲一下解引用到底是啥玩意(转自百度百科)
"*"的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。也就是说,解引用是返回内存地址中对应的对象。

比如int a=10; int *p=&a;
cout<<*p<<endl; 输出a的值,就是解引用操作。

因为p是一个int类型的指针变量(int*),指向的是一个地址,在p前面加上*,就是解开这个地址,取出里面的值。

5.void*的作用

void * 以定义一个指针变量,但不说明它指向哪一种类型数据.

1.传参:通用类型

可以作为函数模板,链表等参数的通用参数。在使用时,只需要强制类型转换就可以。

2.强制类型转换

有时候由于重载等的干扰,导致需要转换成void *,来进行取地址。
例如,(void *)obj.member,就可以取到member的地址;直接&(obj.member)取到的实际上是obj的开始地址。

3.指向0的地址

(void *)0,指向全是0的地址,相当于NULL。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这段代码定义了一个名为 `vector` 的类,它是一个动态数组。以下是每行代码的具体含义: - `#pragma once`:这是一个预编译指令,表示这个头文件只会被编译一次,以避免重复定义。 - `const int VECTOR_INIT_CAPACITY = 10;`:这是一个常量,表示 `vector` 对象的默认初始容量是 10。 - `class vector {`:定义了一个类 `vector`。 - `public:`:这是类的公共成员部分,表示这些成员可以从类的外部访问。 - `bool (*append)(class vector* pVec, void* data);`:这是一个函数指针成员,指向一个名为 `append` 的函数,该函数的作用是将一个元素添加到 `vector` 的末尾。该函数指针接受两个参数:指向 `vector` 对象的指针和要添加的元素的指针。该函数返回一个布尔值,表示添加是否成功。 - `void* (*get)(class vector* pVec, int index);`:这是一个函数指针成员,指向一个名为 `get` 的函数,该函数的作用是获取 `vector` 中指定位置的元素。该函数指针接受两个参数:指向 `vector` 对象的指针和要获取元素的下标。该函数返回一个指向获取到的元素的指针。 - `void (*clear)(class vector* pVec);`:这是一个函数指针成员,指向一个名为 `clear` 的函数,该函数的作用是清空 `vector` 中的所有元素。该函数指针接受一个指向 `vector` 对象的指针作为参数,不返回任何值。 - `void (*remove)(class vector* pVec, int index);`:这是一个函数指针成员,指向一个名为 `remove` 的函数,该函数的作用是从 `vector` 中删除指定位置的元素。该函数指针接受两个参数:指向 `vector` 对象的指针和要删除元素的下标,不返回任何值。 - `void** pData;`:这是一个指向指针指针成员,表示指向 `vector` 中元素的指针数组。 - `int size;`:这是一个整型成员,表示 `vector` 中元素的数量。 - `int capacity;`:这是一个整型成员,表示 `vector` 对象当前的容量。 - `};`:类定义的结束符号。 - `void vectorInit(class vector*);`:这是一个函数声明,表示初始化 `vector` 对象。该函数接受一个指向 `vector` 对象的指针作为参数,不返回任何值。 - `void vectorDestroy(class vector* pVec);`:这是一个函数声明,表示销毁 `vector` 对象。该函数接受一个指向 `vector` 对象的指针作为参数,不返回任何值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值