研究生
最后登录1970-1-1
在线时间 小时
注册时间2018-7-14
|

楼主 |
发表于 2019-10-28 13:24:54
|
显示全部楼层
感谢WishWish的回答
后来经过试验,发现(uint8_t *)&strXPT2046_TouchPara和((uint8_t *)strXPT2046_TouchPara是一样的,它们具有相同的地址值.
int a[10];
其中a是数组名,代表这个数组的首地址;而a又是一个有10个元素的数组,&a代表这个数组的地址.所以a = &a.
从这里知道自己的基本功还不扎实.再次感谢wishwish的解答.
1) 数组
数组在声明时,即分配了空间:
int a[5];
一旦声明a[5],相当于有a、a[0]、a[1]、a[2]、a[3]、a[4]这6个变量名。a[i]的指代方式和普通的变量名int i相同,指到一个对应的内存空间;关键是变量名a,本身就可以做地址用。我们知道a是数组名,但a并不代表整个数组的地址,而是指向数组首元素的地址(虽然在数值上是相同的,下面会有详细解释),所以可以有 int *p = a;。那么&a又怎么解释呢?对于int i而言,i代表一个空间,&i表示i所代表的空间地址;那么&a应该也是表示a所代表的地址了,也就是整个数组的地址。
a、&a和&a[0]同代表地址,且由于数组是顺序存储,所以a、&a和&a[0]所表示的地址在数据上是相同的,但是实际的指代意义却是不同的:
•a是个int*类型的数据,相当于&(*a),是指向数组首元素的地址;
•&a指代整个数组,是个int(*)[]类型的数据,是指针数组的地址;
•&a[0]则是仅指代一个存储int的空间,是int*类型的数据。
也就是数组名,本身可以作为地址使用,指代该结构的首元素的地址。
|
|