c ++指针和索引更改位置

时间:2013-05-11 10:51:57

标签: c++ pointers

我在互联网上发现了这个代码,并想知道它是如何工作的?

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

2 个答案:

答案 0 :(得分:6)

ab中的一个是指针而另一个是整数时,a[b]相当于*(a + b)。由于加法是可交换的,因此与*(b + a)相同,[]的定义与b[a]的定义相同。

答案 1 :(得分:4)

在您的情况下,a[b]相当于b[a],类似于a + bb + a相同的方式。

a[3]会将3地址转发到内存中 3[a]会将a地址从3开始转发到内存中。

看看它是如何工作的? ;)(当然,这仅适用于指针,因为它们是内存地址)