3

 *(ary[3]+8)

 ary[3][8]

同じだ ?はいの場合、その方法を説明してください。ary[3] は、最初の要素のアドレスまたは ary[3][0] の値を返しますか? ary は 2 次元配列です。

前もって感謝します。

4

4 に答える 4

4

はい

a[i]と同じです*(a+i)

ary[i][j]と同じです*( *(ary+i)+j))

于 2013-07-02T07:09:00.310 に答える
1

xが配列である場合(intなど)x[i]は、 の構文糖衣にすぎません*(x+i)。あなたの場合、aryは 2 次元配列です (再びint、と言います)。同じシンタックス シュガー メカニズムにより、ary[i][j]は と同等*((*(ary+i))+j)であり、内部で何が起こっているかは明らかです。

于 2013-07-02T07:17:48.117 に答える
1

*(ary[3]+8)3 行目の 8 列目の値を示します。ary[3]3行目のベースアドレスです。ary[3][8]3 行目 8 列目の同じ要素にもアクセスします。

例として、8 要素の 1D 配列と同等の 2 行 4 列の 2D 配列を使用しています。以下に示すように。

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

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

b2D 配列であるため、2 つの 1D 配列の配列と見なすことができます。b[1] または b[1][0] を渡すと、最初の行のアドレスが示されます。要素 a[row][col] のアドレスを見つけたい場合、次のように計算されます

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

于 2013-07-02T07:14:00.707 に答える
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 に答える