gpt4 book ai didi

c - sizeof 如何处理数组指针的取消引用?

转载 作者:行者123 更新时间:2023-12-02 22:11:08 25 4
gpt4 key购买 nike

这里我有一个指向 4 个整数的数组 arr 的指针 ptrptr 指向整个数组。 ptr[0]*ptr 指向数组的第一个元素,因此将 1 添加到 ptr[0] 给出数组的地址数组的第二个元素。

我不明白为什么使用 sizeof(ptr[0]) 给出整个数组的大小,16 个字节,而不是仅第一个元素的大小,4 个字节,(如 ptr[0] 指向数组中的第一个元素)。

int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16

最佳答案

OP: ptr[0] points to the first element in the array.

类型困惑。 ptr[0] 是一个数组。

ptrpointer to array 4 of int .
ptr[0]*ptr 一样,遵循指向数组的指针
sizeof(ptr[0]) 是数组的大小。

<小时/>

使用 sizeof(ptr[0])ptr[0] 不会产生“类型为“指向类型的指针”的表达式,该表达式指向初始值”数组对象的元素”转换。 (c11dr §6.3.2.1 3)。对于 sizeofptr[0] 是一个数组。

关于c - sizeof 如何处理数组指针的取消引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58581310/

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