指针第二部分(指针变量的定义、初始化、使用)---- 2021.1.29

目录

    • 上一讲指针链接:
    • 指针变量的定义、初始化
    • 指针变量的使用
    • 结束语

上一讲指针链接:

指针第一部分(内存、指针、指针变量的浅析)---- 2021.1.27

指针变量的定义、初始化

首先我们定义一个整型变量a,并且给这个变量赋值为10。如下所示。

int a = 10;

上一篇文章也提到过,为什么我们会用到指针变量,是因为我们可以通过指针来直接操作其对应的内存。所以为了使大家更加了解,特意画了一张图供大家观看,如下所示。

指针第二部分(指针变量的定义、初始化、使用)---- 2021.1.29_第1张图片
对上图解释如下:

  1. 首先定义了一个整型变量a,那么如图所示,就会在虚拟内存空间中开辟一个内存用来存放变量a,又因为变量a的数据类型为int类型,所以占4个字节,由上一讲可知,内存空间是由一个个字节组成的,且每个字节都有地址编号。所以图中a占4个字节空间,并且值为10。
  2. 假设我们a的地址编号为0x2000 0000。

那么由上一讲可知,指针变量是用来存放指针(地址)的变量。那么我们定义一个指针变量p用来存放变量a的地址,从而可以通过p来操作a所在的内存空间。如下图所示。

指针第二部分(指针变量的定义、初始化、使用)---- 2021.1.29_第2张图片
对上图解释如下:

  1. 我们定义了一个指针变量p,用来存放变量a的地址编号,如图中所示,为0x2000 0000。并且由上一讲可知,对于32位编译器而言,指针变量占4个字节就可以存下。

那么接下来我引出一个问题:此时此刻的指针变量p是什么数据类型的?
所以我们需要追根溯源,明白指针变量是如何定义的。
接下来很重要,需要大家谨记!!!

定义指针的3个步骤:

  1. “ * ”符号与字母符号结合代表是一个指针变量 。例如:*p
  2. 要保存谁的地址,将他的定义形式放在此处。例如:int a
  3. 用*p替换掉定义的变量。最终结果为:int *p

针对上述3个步骤的分析如下:

  1. 与“ * ”结合代表这个变量是一个指针变量。
  2. p是变量,如果想要查看p的数据类型,只需要将p抹掉,剩下的类型就是指针变量的类型。所以前面我们已经定义好的
  指针int *p是int *类型
  1. 指针变量p是用来保存什么类型数据的地址?
    将指针变量p和指针变量p最近的“ * ”一起抹掉,剩下的类型就是保存什么类型的数据的地址。
   指针int *p是用来保存int类型的地址 (p = &a)

为了更好的理解上述分析的原理,所以我举了两个例子供大家举一反三。

  1. int a[10];
    我们需要定义一个指针变量用来保存数组的地址。其实很简单,根据我们上述阐述的定义指针的三个步骤即可实现。
    最终结果为int (*p)[10] = &a;
  2. int **p;
    p是变量,int**是变量p的数据类型。
    p是用来保存int*类型的数据的地址

指针变量的使用

很简单,指针变量保存谁的地址就指向了谁,如上图所示的箭头,p指向了a,意味着就可以操作其对应的内存空间。

eg:*p = 100;

在使用时,* 与p结合代表,取p指针所指向的那块空间的内容。自然而然也就可以修改其对应内存空间的内容了。

结束语

如果觉得这篇文章还不错的话,记得点赞 ,支持下!!!

你可能感兴趣的:(C)