C语言指针难理解?图形化助你轻松记忆!
收到很多同学的反映,指针这里学习起来好绕,今天我来分享一种浅显易懂的方法——将文字图形化,来帮助大家理解记忆!
今天主要讲两大块内容:指针以及指针和数组,希望大家能够有所收获!
一、指针的概念
指针
变量在内存中所占空间的首编号,就称为该变量的首地址,即指针
我们取age变量的首地址1000,用一个变量保存起来,由于int占4个字节,所以很方便以后查找此变量。
指针变量:
专门存放另一个变量的首地址的变量,即指针变量
定义指针变量:类型说明符 *变量名;
eg:int *p;(理解为int* p更易懂,两种意思一样——整型的指针变量)
类型说明符用来解决这个问题:当我找到这个变量的首地址之后,往后读几个字节?
eg:int——4个;char——1个
int* p_age;
p_age = &age; //取首地址,赋值给指针变量p_age,p_age此时存放的是地址
printf("%d", *p_age); // * 用于取内容。输出指针变量p_age对应的内容,也就 是取出地址对应的值——即age
【符号区分】
1.两个*代表的意义完全不同:定义变量时, * 用来说明这是一个指针变量;使用变量时, * 用来取指针变量指向的值
2.* 和 & 有啥区别?
假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a和&*pa分别是什么意思呢?
*&a可以理解为*(&a),&a表示取变量 a 的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a仍然等价于 a。
&*pa可以理解为&(*pa),*pa表示取得 pa 指向的数据(等价于 a),&(*pa)表示数据的地址(等价于 &a),所以&*pa等价于 pa。
二、指针和数组
数组名
C语言规定:数组名代表数组的首地址,即下标为0元素的地址。(如下图)
指针指向数组元素的____
p是一个指针,指向数组某元素的首地址(根据赋值语句判断:例如,p = a,等价于p = &a[0],p指向a[0]元素的首地址;p = a+1,代表指向a[1]元素的首地址);p+1仍代表一个指针,指向数组的下标为1的元素的首地址——使用指针p+i,就会指向数组下标为i的元素(如下图)
6个易错指针执行过程
下面这六个常见的易错指针的执行过程,大家要好好理解一下呦!
- 点赞
- 收藏
- 关注作者
评论(0)