上一讲指针链接:
指针第一部分(内存、指针、指针变量的浅析)---- 2021.1.27
指针变量的定义、初始化
首先我们定义一个整型变量a,并且给这个变量赋值为10。如下所示。
int a = 10;
上一篇文章也提到过,为什么我们会用到指针变量,是因为我们可以通过指针来直接操作其对应的内存。所以为了使大家更加了解,特意画了一张图供大家观看,如下所示。
对上图解释如下:
- 首先定义了一个整型变量a,那么如图所示,就会在虚拟内存空间中开辟一个内存用来存放变量a,又因为变量a的数据类型为int类型,所以占4个字节,由上一讲可知,内存空间是由一个个字节组成的,且每个字节都有地址编号。所以图中a占4个字节空间,并且值为10。
- 假设我们a的地址编号为0x2000 0000。
那么由上一讲可知,指针变量是用来存放指针(地址)的变量。那么我们定义一个指针变量p用来存放变量a的地址,从而可以通过p来操作a所在的内存空间。如下图所示。
对上图解释如下:
- 我们定义了一个指针变量p,用来存放变量a的地址编号,如图中所示,为0x2000 0000。并且由上一讲可知,对于32位编译器而言,指针变量占4个字节就可以存下。
那么接下来我引出一个问题:此时此刻的指针变量p是什么数据类型的?
所以我们需要追根溯源,明白指针变量是如何定义的。
接下来很重要,需要大家谨记!!!
定义指针的3个步骤:
- “ * ”符号与字母符号结合代表是一个指针变量 。例如:*p
- 要保存谁的地址,将他的定义形式放在此处。例如:int a
- 用*p替换掉定义的变量。最终结果为:int *p
针对上述3个步骤的分析如下:
- 与“ * ”结合代表这个变量是一个指针变量。
- p是变量,如果想要查看p的数据类型,只需要将p抹掉,剩下的类型就是指针变量的类型。所以前面我们已经定义好的
指针int *p是int *类型
- 指针变量p是用来保存什么类型数据的地址?
将指针变量p和指针变量p最近的“ * ”一起抹掉,剩下的类型就是保存什么类型的数据的地址。
指针int *p是用来保存int类型的地址 (p = &a)
为了更好的理解上述分析的原理,所以我举了两个例子供大家举一反三。
int a[10];
我们需要定义一个指针变量用来保存数组的地址。其实很简单,根据我们上述阐述的定义指针的三个步骤即可实现。
最终结果为int (*p)[10] = &a;
int **p;
p是变量,int**
是变量p的数据类型。
p是用来保存int*
类型的数据的地址
指针变量的使用
很简单,指针变量保存谁的地址就指向了谁,如上图所示的箭头,p指向了a,意味着就可以操作其对应的内存空间。
eg:*p = 100;
在使用时,* 与p结合代表,取p指针所指向的那块空间的内容。自然而然也就可以修改其对应内存空间的内容了。
结束语
如果觉得这篇文章还不错的话,记得点赞 ,支持下!!!