目录
前言
指针无疑是学习C语言时的重难点,很多人对指针的学习都很头疼,我也差不多,所以我现在想在学完指针全部知识点的前提下,系统地将其梳理一遍,来加深我对指针的了解和掌握。以下则是我对我所学指针全部知识点的梳理。
一、内存是什么?
要想了解指针,就必须知道内存是什么,因为有内存方才会有指针(下面会提)。按我的理解,内存其实就是电脑程序运行前临时存放程序及其相关文档的一块空间,可以将其想像成一栋楼,然后这一整块空间又由许多以字节为单位的小空间组成,这些小空间就相当于组成这楼的各个小房间。
二、指针
1.什么是指针
内存单元的编号==指针==地址
打个比方,比如我刚开学的时候,我被分配到学校一栋楼里某层的某间宿舍,但是我刚来并不知道在是哪个宿舍,这时你师姐告诉你宿舍的门牌号,叫D5511,这时你就能根据这个门牌号去找到你的宿舍了,那么这里这个宿舍门牌号就是地址,有了地址,我们就能非常容易得找到自己的宿舍(内存中的空间)。在内存中,为了方便计算机快速访问内存中的某块空间,通常会给内存中的每块空间进行编址,其实就是给每块空间编一个门牌号。
2.指针变量
&操作符
&是取地址操作符,某些时候,要是想访问内存某块空间的内容,我们可以将其地址给取出来,这时就需要用到&取地址操作符了。
指针变量的意义
指针变量是用来存放地址的变量,存放在指针变量里的值都会被认为是地址。
这里我们可以用类比的方法来理解指针变量,比如 整形数据存放在整形变量里,浮点型数据存放在浮点型变量里,那么地址(指针)就得存放在指针变量里。
int a = 10;
int * p = &a;
对 int * p 进行拆解介绍,首先 p 是一个变量,在 p 前面加上 * 号 就表明 p 是一个指针变量,那么int 则是说明这个指针变量里的地址指向的是一个 int 类型的数据。
* 操作符
用一个指针变量将一个地址存放起来,是为了后面能通过这个地址找到这个地址指向的空间,对其内容进行访问。
int main()
{
int a = 10;
int * p = &a;
*p = 0;
return 0;
}
第五行的 *p 意思是指通过p中存放的地址找到其指向的空间, *p 就是a 变量了,然后0赋给a,那么a的内容就被修改了。那么有人就会问,为什么要通过这种方法改变a的值,直接将0赋给a不是更简单明了吗,其实了,通过指针访问修改让我们在写代码的时候多了一种途径或方法,这让我们在以后写代码的时候会更加灵活。
指针变量的大小
是变量就会有大小,如int形变量占四个字节,char类型变量占一个字节。那么指针变量占多少个字节空间。在32位的计算机上,32位说明有32根地址总线,每根地址总线的状态仅有0或1两种,那么我们就把32根地址总线组成的32位0或1序列作为一个地址,既然是32位,那么就需要4个字节来存储(每