gpt4 book ai didi

c - 二维数组不会衰减到指向指针的指针

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:42 24 4
gpt4 key购买 nike

到目前为止,我非常确定

int arr[4][5];

然后 arr 将衰减为指向指针的指针。

但是this link proves me wrong.

我不确定我是怎么知道 arr 是指向指针的指针,但对我来说这似乎很明显。因为 arr[i] 将是一个指针,因此 arr 应该是一个指向指针的指针。

我是不是错过了什么。

最佳答案

是的,你错过了很多:)

为了避免另一面文字墙,我将链接到 an answer I wrote earlier today解释多维数组。

考虑到这一点,arr 是一个包含 4 个元素的一维数组,每个元素都是 5 个 int 的数组。当在 &arrsizeof arr 以外的表达式中使用时,它会衰减为 &arr[0]。但是什么是&arr[0]?它是一个指针,重要的是,它是一个右值。

因为 &arr[0] 是一个指针,它不能进一步衰减。 (数组会衰减,指针不会)。此外,它是一个右值。即使它可以衰变成一个指针,那个指针会指向哪里?您不能指向右值。 (什么是 &(x+y) ?)

另一种看待它的方式是记住 int arr[4][5]; 是一个连续的 20 个 int block ,分为 4 个部分5 在编译器的头脑中,但在运行时在内存中没有特殊标记。

如果存在“双重衰减”,那么 int ** 会指向什么?根据定义,它必须指向 int *。但是 int * 在内存中的什么地方?肯定不会有一堆指针在内存中徘徊以防万一。

关于c - 二维数组不会衰减到指向指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22987042/

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