指向一组int的指针

时间:2014-10-03 05:32:57

标签: c++ c arrays pointers

有什么区别:

//Example of "Complicated Array Declarations" from C++ Primer
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int (*Parr)[10] = &arr;

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int *Parr = arr;

两者都是指向整数数组的指针。但是为了在第一个代码段中访问arr的第一个元素,我必须执行**Parr而在第二个元素中,我只需要取消引用一次*Parr

3 个答案:

答案 0 :(得分:6)

在第一个代码示例中,

int (*Parr)[10] = &arr;

Parr是一个指向10个int数组的指针。它只能指向这样一个对象。例如,

int (*Parr)[10];
int a[10];
Parr = &a; // OK
int b[42];
Parr = &b; // ERROR, b is of the wrong type

在第二个代码示例中,

int *Parr = arr;

Parr是指向int的指针,已初始化为指向arr的第一个元素。但它可以指向任何int

int* Parr;
int a[10];
Parr = &a; // OK, a decays to int*
int b[42];
Parr = &b; // OK, b decays to int*
int c = 42;
Parr = &c; // OK, c is an int*

答案 1 :(得分:1)

我们可以有一个指向整数或指向foat的指针的方式,我们还可以有一个指向数组的指针吗? 答案是"是"。指向数组的指针的声明,但是有点笨拙。

例如,声明int(* q)[4] 表示q是指向4整数数组的指针。在您的代码中

int(* parr)[10]表示parr是一个指向10整数数组的指针。

但是int * parr = arr只是指向arr [10]的oth元素的指针。

所以假设你指向arr [10]的任何指针。 在第二种情况下做parr ++。parr将移动到位置arr [10]形式arr [0]。 但 在第二种情况下做parr ++。parr将移动到位置arr [1]形式arr [0]。

所以我希望你能得到答案。

答案 2 :(得分:1)

第一个是指向int [10]'。

的指针
int (*Parr)[10] = &arr;  // point to int array

*Parr;   // *Parr == arr 
**Parr;  // **Parr == *(arr) == arr[0]

第二个是指向int'

的指针
int *Parr = arr;         // point to the start of array
*Parr;   // *Parr == *(arr) == arr[0]