作者:阿尔及利亚奥兰叉 | 来源:互联网 | 2023-02-06 03:45
1> davmac..:
在大多数(尽管不是全部)上下文中,数组"衰减"为指向其第一个元素的指针.这就是为什么ch
,并&ch[0]
在你的榜样(数组元素访问具有比运营商"的地址为"更高的优先级,因此后者也可以写成相同&(ch[0])
).
剩下的&ch
是一个数组不会衰减成指针的情况; 相反,你得到了数组的地址.当然,这与数组的第一个元素的地址相同 - 但是,重要的是,它具有不同的类型; 它是类型char (*)[7]
,即指向具有7个元素的char数组的指针.另外两个指针是类型的char *
,即指向个体的指针char
.
既然sptr
是一个指针,&sptr
那个指针的地址自然会有所不同.&sptr[0]
相当于sptr + 0
,当然等于sptr
.
你不明白为什么sptr
并&sptr
产生不同的地址表明对指针的误解.指针是一个固定大小的对象,其值可以引用(指向)特定类型的某个任意对象.因为它本身就是一个对象,所以可以使指针指向不同的对象.另一方面,数组变量始终(在其生命周期内)引用相同的数组对象.
在您的示例输出中:
00037CD0 00FDFD5C 00037CD0
第一个值00037CD0是sptr
点的位置- 也就是说,它是字符串常量"132456"的内存位置.第二个值00FDFD5C是sptr
变量本身的地址.这表明在地址00FDFD5C处有一个指针对象,它保存值00037CD0.
从本质上讲,两种情况之间的区别归结为:
数组的地址与其第一个元素的地址相同
另一方面,指针的地址与指针当前指向的内容无关.