我在互联网上发现了这个代码,并想知道它是如何工作的?
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
答案 0 :(得分:6)
当a
和b
中的一个是指针而另一个是整数时,a[b]
相当于*(a + b)
。由于加法是可交换的,因此与*(b + a)
相同,[]
的定义与b[a]
的定义相同。
答案 1 :(得分:4)
在您的情况下,a[b]
相当于b[a]
,类似于a + b
与b + a
相同的方式。
a[3]
会将3
地址转发到内存中
3[a]
会将a
地址从3开始转发到内存中。
看看它是如何工作的? ;)(当然,这仅适用于指针,因为它们是内存地址)