指向一组int的指针

Qua*_*ale 0 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;
Run Code Online (Sandbox Code Playgroud)

和:

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int *Parr = arr;
Run Code Online (Sandbox Code Playgroud)

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

jua*_*nza 6

在第一个代码示例中,

int (*Parr)[10] = &arr;
Run Code Online (Sandbox Code Playgroud)

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

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

在第二个代码示例中,

int *Parr = arr;
Run Code Online (Sandbox Code Playgroud)

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*
Run Code Online (Sandbox Code Playgroud)

  • @EngieOP它是一个指向数组的指针.所以你需要一个去引用来到它指向的数组,另一个去到元素.你也可以做`(*Parr)[3]`. (2认同)