作为一名小白,对指针总是昏头昏脑的,先写下最近一次学习的体会。
一、一些符号(&和*)
我们不妨假设内存是一间公寓楼,门牌号有是十六进制的数,为了方便理解,还是类似于1000/1004这样真正的房间号
& 取地址(看到这个就要形成条件反射,有了它,你能知道你房间的门牌号)
例:&xiaoming 这样你就能得到小明的门牌号了,可能他的门牌号是1004
* 对指针做解引用操作 (你可以把他当做一种工具,类似于一把钥匙)
二、指针定义的理解
本质定义是:指针是一个变量,值是另一个变量的地址。
你可以当成,你的指南针是一个变量,有了它你就能知道你的另一个变量——房间的地址了
指南针也要分型号的,因此指针也分为int、double、float、char不同的型号,不同型号的指南针和不同房间的型号是一一搭配的。
int *inthouse; //一个int型的指针
double *doublehouse; //一个 double 型的指针
float *floathouse; //一个float型的指针
char *charhouse; //一个char型的指针
注意:记住!!说到指针,其实是指针(变量);
*inthouse 中的 * 不是指针,它只是inthouse用来告诉你,我的名字前面加个 *,我就是与众不同的指针变量
三、使用指针
1. 指针变量的声明
有了这个针我们怎么用呢?首先我们得先说明这是什么型号的指南针
例如(二)中讲到的
int *inthouse; //对它进行声明——这是一支int型的指南针
2. 在指针变量中存储地址
但是指南针虽然能指向房间地址但是它记不住房间的号码呀,于是为了让他能记住,我们使用这一句
inthouse = &xiaoming; //在指针变量中存储xiaoming的地址
相当于我们对这个指南针贴上了磁条,告诉它一定要记住指向的是小明的房间号
3. 使用指针访问值
假设小明的房间号是1004,里面只装着一个东西——一张写了5的卡片
为了知道这张卡片写的是什么,我们要用指南针锁定位置,利用这一句输出卡片上的值
printf(“%d”, *inthouse); //输出结果是 5
4. 加*和不加*?
printf(“%d”, inthouse); //输出结果是1004
printf(“%d”, *inthouse); //输出结果是 5
记住:带了*的,相当于一把钥匙,能够访问到房间内的值,而没带*的,他只是一个指南针,记得着一件房间号,进不去里面