3

 *(ary[3]+8)

 ary[3][8]

是相同的 ?如果是,请解释如何?ary[3] 返回第一个元素的地址或 ary[3][0] 中的值?ary 是一个二维数组。

提前致谢。

4

4 回答 4

4

是的

a[i]*(a+i)

ary[i][j]*( *(ary+i)+j))

于 2013-07-02T07:09:00.310 回答
1

*(ary[3]+8)表示第三行第 8 列的值。ary[3]是第三行的基地址。ary[3][8]还将访问第三行和第 8 列的相同元素。

例如,我采用两行四列的二维数组,相当于 8 个元素的一维数组。如下所示。

int a[8] = {0,1,2,3,4,5,6,7};

int b[2][4] = {{0,1,2,3},{4,5,6,7}};

因为b是 2D 数组,所以您可以将其视为两个 1D 数组的数组。当您传递 b[1] 或 b[1][0] 时,它表示第一行的地址。如果您在内存中分配了由 Row.so 分配的矩形数组想要找到元素 a[row][col] 的地址,它将被计算为

address = baseAddress + elementSize * (row*(total number of column) + col);

于 2013-07-02T07:14:00.707 回答
1

If xis an array ( int, say)x[i]只是*(x+i). 在你的情况下,ary是一个二维数组(再次int,比如说)。通过相同的语法糖机制,ary[i][j]等效于*((*(ary+i))+j),从中可以清楚地看到引擎盖下发生了什么。

于 2013-07-02T07:17:48.117 回答
0

正如其他人已经说过的那样,a[i]它只是一种糖*(a+i)

我只想补充一点,它总是有效的,它允许我们做这样的事情:

char a[10];
char b;
char c[10][20];

// all of these are the same:
b = a[5];      // classic
b = *(a + 5);  // pointer shifting
b = 5[a];      // even so!

b = c[5][9];
b = *(c[5] + 9);
b = *(*(c + 5) + 9);
b = *(c + 5)[9];
b = 5[c][9];
b = 5[9][c];  // WRONG! Compiling error
于 2013-07-02T08:46:35.230 回答