本文摘要(由ai生成):
这篇文档主要介绍了指针变量的概念、指针所指向的数据类型以及二级指针的使用方法。文档首先解释了什么是指针,指针变量存储的是指向某个数据类型地址的变量。然后通过实例详细介绍了不同类型指针变量的使用方法。文档还介绍了二级指针,即指针套指针,以及如何使用二级指针获取数据。最后对全文进行了总结。
大家对指针应该都熟悉了吧?指针变量存储的是个指向某个数据类型地址变量。char 类型的指针变量(如地址0x0a里面存放着地址变量0x0b)内容指向的数据类型是char、Int类型的指针变量内容指向int类型的数据。如图1所示绿色框内蓝色箭头(0x0a)指向目标数据框(蓝色框)表示目标数据的地址(蓝色框内的内容就是目标数据地址0x0b)。struct 类型(聚合类型数据)的指针变量指向聚合类型数据类型的首地址如图2所示。绿色框内蓝色箭头表示指针变量存储的值,指向目标数据的框顶表示目标数据的首地址。(指针类型强制转换除外)
来个例子:例如
但是指针变量在32为系统中不管指向哪种类型的数据均只占有四个字节,这四个字节存储的值是指向所指向数据单元的的地址,结构体等聚合类型指向的是聚合类型数据的首地址。(这里说的是一级指针哦)
从图4仿真就可以看到指向结构体类型的指针变量指向的是目标结构体首地址。
二级指针就是指针套指针,如图5所示
图5
第一个绿色框内蓝色箭头表示指针变量里面存储着第二个绿色框指针变量的地址,第二个绿色框内存储的地址值才是目标数据的地址。那我们如何去取二级指针里面的内容呢?直接上例子。如图6所示
图6
以一个一维数组为例,将它作为二级指针来用,我们知道指针就是表示的地址值(所以是无符号的整数哦,没那个计算机什么地址是负数吧),形参是二级指针,数组明就是个地址(图5第二个框),为了与形参类型相互匹配所以取数组明的地址(图5第一个框),形参是void **这样的接收方式,多以将数组名的地址强制转化为void*。
再来看接收打印函数, 32为系统的指针是4字节,也就是图5第一个框存储的数据必须输4字节的地址变量,所以先将void* 转换为(unsigned int *)或者 (unsigned char *)。如图7所示:
图7
0x2000042C 是pdata的首地址,如果把void* 转换为(unsigned char *),地址就是四个字节的拼凑和unsigned char *)是一样的,毕竟指针变量占据4个字节嘛。因此我先把void*转换为正确的指针形式之后,也就是正确到达图5的第二个框,也就是要指向的目标数据的框,接下来按照你的定义的所指向目标数据类型转换就行了(此处一定要是所要指向的数据类型)。
总结:指针变量存储的是个指向某个数据类型地址变量。二级指针就是指针套指针,如果指针类型确定取数据就是多一个*的问题,如果是 void ** 首先要转化为(unsigned int *)或者 (unsigned char *)取出第二个指针的内容才能进行后面的操作!
今天的内容就分享到这里了,记得分享加关注哦!!谢谢各位看官!