C语言指针难理解?图形化助你轻松记忆!

举报
kitty787 发表于 2021/06/26 15:07:30 2021/06/26
【摘要】 收到很多同学的反映,指针这里学习起来好绕,今天我来分享一种浅显易懂的方法——将文字图形化,来帮助大家理解记忆!今天主要讲两大块内容:指针以及指针和数组,希望大家能够有所收获!一、指针的概念指针变量在内存中所占空间的首编号,就称为该变量的首地址,即指针 我们取age变量的首地址1000,用一个变量保存起来,由于int占4个字节,所以很方便以后查找此变量。指针变量:专门存放另一个变量的首地址的...

收到很多同学的反映,指针这里学习起来好绕,今天我来分享一种浅显易懂的方法——将文字图形化,来帮助大家理解记忆!

今天主要讲两大块内容:指针以及指针和数组,希望大家能够有所收获!

一、指针的概念

指针

变量在内存中所占空间的首编号,就称为该变量的首地址,即指针

我们取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个易错指针执行过程

下面这六个常见的易错指针的执行过程,大家要好好理解一下呦!


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。