2012-09-10 70 views
1
int arr[10] = {1,2,3,4,5,6,7,8,9,10}; 
int (*parr)[10] = &arr; 

//prints address of arr and the value 1 
cout << parr << " " << *parr[0]; 

//what is this doing? 
parr++; 

//prints (what looks like the address of arr[1]) and some long number -8589329222 
cout << parr << " " << *parr[0]; 

我以为parr ++会增加parr指向的地址,所以* parr [0]现在是* parr [1]的地址。我错在哪里?C++递增指针到阵列

回答

7

您假设parr++增加了一个单词。它没有。它递增的*parr的大小,这在thise情况下是int[10],所以它是由10点的整数(可能是40个字节)的大小递增。

+0

所以它现在有效'arr [10]',另一个'par ++'会使它成为'arr [20]'? – corsiKa

+2

@corsiKa:这是有效'&ARR [10]',是啊,和另一个增量将它有效地'做与改编[20]'(如果那是合法的,这在技术上是不是)。 –

2

你只需要一个指向数组的开始

int* parr = arr; // points to the 0 element 
parr++; // poInts to the first element, 1. 
+2

或者更明确的说,是int * parr =&arr [0];'。其他表单工作的原因也是因为给定正确的上下文,数组名将衰减为指向数组的第一个元素的指针。在SO上处理这个主题有几个问题。 – Praetorian