gpt4 book ai didi

c - 去引用如何作用于指向数组的指针?

转载 作者:行者123 更新时间:2023-12-04 12:33:36 24 4
gpt4 key购买 nike

取消引用时指向元素数组的指针返回一个地址。
由于它保存着数组第一个元素的地址,因此取消引用它应该返回一个值。

int arr[] = { 3, 5, 6, 7, 9 }; 
int *p = arr;
int (*ptr)[5] = &arr;
printf("p = %p, ptr = %p\n", p, ptr);
printf("*p = %d, *ptr = %p\n", *p, *ptr);


输出:

p = 0x7fff6ea72d10,ptr = 0x7fff6ea72d10

* p = 3,* ptr = 0x7fff6ea72d10

* ptr为什么返回数组的基地址,为什么不返回该地址的值呢?

最佳答案

为什么* ptr返回数组的基地址,不是吗?
返回该地址的值?


(p3)除非它是sizeof运算符,_Alignof运算符或一元'&'运算符的操作数,或者是用于初始化数组的字符串文字,否则表达式的类型为“ array of type将“转换为类型为” pointer to type“的表达式,该表达式指向数组对象的初始元素,而不是左值。 C11 Standard - 6.3.2.1 Other Operands - Lvalues, arrays, and function designators(p3)

int (*ptr)[5] = &arr;


ptrint [5]的数组指针。取消引用 ptr时,将得到 int[5]数组。如何访问 int[5]数组?

规则 6.3.2.1提供了答案:


“类型数组”将转换为“类型指针”的表达式,该表达式指向数组对象的初始元素...


现在,如果再次取消引用(例如 **ptr),则将获得第一个元素的值。

关于c - 去引用如何作用于指向数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56280487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com