gpt4 book ai didi

c - 在二阶指针上使用下标运算符

转载 作者:太空狗 更新时间:2023-10-29 17:20:38 25 4
gpt4 key购买 nike

我对 C 中关于指针和数组的问题感到困惑。

先看一段代码:

//case 1
int **a;
a = (int **)malloc(sizeof(int*)*m);
for(i = 0; i < m; i++)
a[i] = (int *)malloc(sizeof(int)*n);

//case 2
int b[m][n];

那么,我们知道,b在内存中的布局如下:

b[0][0] b[0][1] ... ... b[m-1][n-1]

而a在内存中的布局如下:

a
\
_\|
a[0] a[1] ... a[m-1]
| |
| |
| \|/
| a[1][0] a[1][a] ... a[1][n-1]
\|/
a[0][1] a[0][2] ... a[0][n-1]

那么,我的问题是:既然a[0..m-1][0..n-1]在内存中是不连续的,为什么我们可以使用下标运算符[ ]a 上?也就是说,为什么a[i][j]可以得到正确的元素,就像b[i][j]一样?

最佳答案

那是因为 a[i][j] 等于 *(*(a+i) + j)。即使 a 不是连续存储的(可能),指针 *(a+i) 将准确指向正确的位置(其中 a[i][ 0] 被存储)。

关于c - 在二阶指针上使用下标运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18899186/

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