到目前为止我非常确定
int arr[4][5];
Run Code Online (Sandbox Code Playgroud)
然后arr将衰减为指针到指针。
我不确定我是如何arr成为指针到指针的,但这对我来说似乎很明显。因为arr[i]将是一个指针,因此arr应该是一个指向指针的指针。
我是不是错过了什么。
是的,你错过了很多:)
为了避免另一面文字墙,我将链接到我今天早些时候写的解释多维数组的答案。
考虑到这一点,arr这是一个具有 4 个元素的一维数组,每个元素都是一个 5 的数组int。&arr当用于or以外的表达式时sizeof arr,它会衰减为&arr[0]。但什么是&arr[0]?它是一个指针,而且重要的是,它是一个右值。
由于&arr[0]是一个指针,因此它不能进一步衰减。(数组会衰减,而指针不会)。此外,它是一个右值。即使它可以衰变成一个指针,该指针会指向哪里?您不能指向右值。(什么是&(x+y)? )
另一种看待它的方式是记住这int arr[4][5];是一个 20 秒的连续块int,在编译器的脑海中分为 4 组,每组 5 组,但在运行时在内存中没有特殊标记。
如果存在“双重衰变”,那么这意味着什么呢int **?int *根据定义它必须指向 a 。但那在记忆中的什么地方呢int *?当然不会有一堆指针挂在内存中以防万一发生这种情况。
| 归档时间: |
|
| 查看次数: |
1853 次 |
| 最近记录: |