1

インターネットでこのコードを見つけましたが、どのように機能するのか疑問に思っていました。

int m[10]; //array with 10 elements
for (int i=0; i<10; ++i)
    m[i] = i; //simple initializing

int* a = &m[0]; //a - pointer at the first array's element

3[a] = 20; //???

for (int i=0; i<10; ++i)
    cout << m[i] << endl;//out

ご想像のとおり、出力は次のとおりです。

0
1
2
20
4
5
6
7
8
9
4

2 に答える 2

6

aとの一方がbポインタで、もう一方が整数の場合、a[b]は と同等*(a + b)です。加算は交換可能であるため、これは と同じで*(b + a)あり、これは の定義から[]、 と同じb[a]です。

于 2013-05-11T10:55:04.693 に答える
4

あなたの場合、は同様にa[b]と同等です。b[a]a + bb + a

a[3]3a からメモリ内でアドレスを進めます。3 からメモリ内でアドレスを進めます
3[a]a

それがどのように機能するか見てください。;) (もちろん、ポインタはメモリアドレスであるため、これはポインタに対してのみ機能します)

于 2013-05-11T10:54:15.117 に答える