OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7942|回复: 8

关于指针的一个说明

[复制链接]

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
发表于 2016-1-29 17:50:20 | 显示全部楼层 |阅读模式
本帖最后由 q546163199 于 2016-1-29 19:29 编辑

若函数定义为如下所示:
QQ图片20160129172707.png
file:///C:\Users\happyeveryday\Documents\Tencent Files\546163199\Image\C2C\Z~`S`4(J~W4S2XSB3_W{FKU.png
这里的PBuffer表示为一个指向u8类型变量的指针变量

以下分为两种情况讨论
1.当const去掉的情况
即 u8 TEXT_Buffer[]={"!Good Luck to My Father!"}

此时的TEXT_Buffer表示为一个u8型数组的首地址,同时是一个常量

C语言中,用数组名作为函数调用的实参时,实际上传递给形参的是该数组的首地址

所以在调用AT24CXX_Write(0,TEXT_Buffer,SIZE)时,传递给形参pBuffer的是该TEXT_Buffer数组的首地址,
即TEXT_Buffer[0]的地址,
即指针变量pBuffer的值是数组元素TEXT_Buffer[0]的地址
即pBuffer是指向数组元素TEXT_Buffer[0]的指针变量,

在这里我要解释下,什么叫做“指向":

指向,就是代表着,指针变量的值是某个变量的地址,但是对于数组而言,就是表示,指针变量的值是某个数组中的元素的地址



同时如图所示
1.png
所以在这里我们可以说明,指针变量pBuffer已指向TEXT_Buffer数组的第一个元素即TEXT_Buffer[0]
file:///C:\Users\happyeveryday\Documents\Tencent Files\546163199\Image\C2C\L_LZ9@M]_(()5F9K7)TUI0I.png
所以我们可以操作pBuffer来操作TEXT_Buffer数组中的内容

例如:
*(pBuffer)等价于TEXT_Buffer[0]
*(pBuffer+1)等价于TEXT_Buffer[0+1]即TEXT_Buffer[1]

2.当const不去掉的情况
即const u8 TEXT_Buffer[]={"!Good Luck to My Father!"}

此时的TEXT_Buffer表示为一个const u8型数组的首地址,同时是一个常量

C语言中,用数组名作为函数调用的实参时,要求形参与相对应的实参必须是相同类型

所以运用(u8*)TEXT_Buffer将TEXT_Buffer强制转化为u8型数组的首地址
所以在调用AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE)时, 我们可以操作形参pBuffer来操作TEXT_Buffer数组中的内容

这是我自己的理解,有什么不对之处,希望大家可以提出来,这是我看了三天的结果,肯定有不对之处,谢谢大家了
2.png
如果大家还是不能理解的话,直接记住图片中的话就行,这是我在 C Primer Plus中看到的

在这里,我要感谢他的帮助 3.png ,大力支持啊!!!




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2016-1-29 18:18:22 | 显示全部楼层
回复 支持 反对

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2016-1-29 18:20:29 | 显示全部楼层

亲,给个评价啊。O(∩_∩)O哈哈~,我不知道我说的对不对
回复 支持 反对

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-29 19:12:30 | 显示全部楼层
我来顶你了
回复 支持 反对

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2016-1-29 19:14:16 | 显示全部楼层

O(∩_∩)O哈哈哈~
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-9-26
在线时间
22 小时
发表于 2016-11-17 21:08:49 | 显示全部楼层
多谢楼主分享,搞定
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2017-3-12
在线时间
29 小时
发表于 2017-5-13 20:25:19 | 显示全部楼层
谢谢分享  解决问题了
回复 支持 反对

使用道具 举报

87

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2016-3-26
在线时间
116 小时
发表于 2017-5-13 20:30:14 | 显示全部楼层
就是说用const定义的数组也能改变咯?
回复 支持 反对

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2017-5-15 23:17:43 | 显示全部楼层
zhoujianwen 发表于 2017-5-13 20:30
就是说用const定义的数组也能改变咯?

const定义的,就不能改了,否则系统就会报错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 03:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表