为什么打印5?

时间:2017-10-04 11:51:21

标签: arrays c++11

假设我们有以下内容:

int array[][2]{1, 2, 3, 4, 5, 6};

cout << ( * ( array + 1 ) )[2] << endl;

我不明白为什么打印5。

我认为(数组+ 1)给我们一个int * [2]到{3,4},所以,我们可以把它看作第二行。让我们调用这个指针ptr。

(* ptr)[2]

这是说我应该取消引用ptr然后打印索引2处的内容吗?没有解除引用ptr给我一个指向3号的int *?

2 个答案:

答案 0 :(得分:2)

(array + 1)指向3,与(array + 1)[0]

相同

然后:

(array + 1)[0] = 3
(array + 1)[1] = 4
(array + 1)[2] = 5

数组从0开始

答案 1 :(得分:0)

因为你有一个[] [2]的数组,所以有2个元素,你正在通过索引2访问,这实际上是第3个数字(0,1,2)