关于指针的一个说明

2019-07-20 14:31发布

本帖最后由 q546163199 于 2016-1-29 19:29 编辑

若函数定义为如下所示:
QQ图片20160129172707.png
file:///C:UsershappyeverydayDocumentsTencent Files546163199ImageC2C~`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:UsershappyeverydayDocumentsTencent Files546163199ImageC2CL_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 ,大力支持啊!!!




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。