C++ 指向整数数组的指针
以下两者之间的区别是什么:C++ 指向整数数组的指针,c++,c,arrays,pointers,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; 以及: 两者都是指向整数数组的指针。但是为了访问第一个代码片段中arr的第一个元素,我必须执行**Parr,而在第二个代码片段中,我只需在第一个代码示例中取消引用一次*Parr int (*Parr)[10] =
//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;
以及:
两者都是指向整数数组的指针。但是为了访问第一个代码片段中
arr
的第一个元素,我必须执行**Parr
,而在第二个代码片段中,我只需在第一个代码示例中取消引用一次*Parr
int (*Parr)[10] = &arr;
int *Parr = arr;
Parr
是指向10整数数组的指针。它只能指向这样一个对象。比如说,
int (*Parr)[10];
int a[10];
Parr = &a; // OK
int b[42];
Parr = &b; // ERROR, b is of the wrong type
在第二个代码示例中
int (*Parr)[10] = &arr;
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*
在第一个代码示例中
int (*Parr)[10] = &arr;
int *Parr = arr;
Parr
是指向10整数数组的指针。它只能指向这样一个对象。比如说,
int (*Parr)[10];
int a[10];
Parr = &a; // OK
int b[42];
Parr = &b; // ERROR, b is of the wrong type
在第二个代码示例中
int (*Parr)[10] = &arr;
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*
我们可以有一个指向整数的指针,或者一个指向foat的指针,我们也可以有一个指向数组的指针吗?
答案是“是”。然而,声明指向数组的指针有点笨拙
例如,声明int(*q)[4]
表示q是指向4整数数组的指针。在代码中
int(*parr)[10]表示parr是指向10整数数组的指针
但是int*parr=arr只是指向arr[10]的oth元素的指针
所以假设你有一个指向arr[10]的指针。
在第二种情况下,执行parr++。parr将从arr[0]移动到位置arr[10]。
但是
在第二种情况下,执行parr++。parr将从arr[0]移动到位置arr[1]
所以我希望你能得到答案。我们可以有一个指向整数的指针,或者一个指向foat的指针,我们也可以有一个指向数组的指针吗?
答案是“是”。然而,声明指向数组的指针有点笨拙
例如,声明int(*q)[4]
表示q是指向4整数数组的指针。在代码中
int(*parr)[10]表示parr是指向10整数数组的指针
但是int*parr=arr只是指向arr[10]的oth元素的指针
所以假设你有一个指向arr[10]的指针。
在第二种情况下,执行parr++。parr将从arr[0]移动到位置arr[10]。
但是
在第二种情况下,执行parr++。parr将从arr[0]移动到位置arr[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]
第一个是“指向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]
你能解释一下为什么我需要两次取消对Parr的引用吗?@EngieOP它是指向数组的指针。因此,您需要一个反引用来访问它所指向的数组,另一个反引用来访问元素。你也可以做(*Parr)[3]
。好的,现在这更有意义了。谢谢。你也可以考虑int(*PARR)[10 ]是一个指向[[] ] [1]整数2D矩阵的第一行的指针。Parr[0]将指向第一行,Parr[1]将指向第二行,若要索引矩阵中的特定整数,可以使用Parr[row][column]。请解释一下为什么需要取消对Parr的引用两次?@EngieOP它是指向数组的指针。因此,您需要一个反引用来访问它所指向的数组,另一个反引用来访问元素。你也可以做(*Parr)[3]
。好的,现在这更有意义了。谢谢。你也可以考虑int(*PARR)[10 ]是一个指向[[] ] [1]整数2D矩阵的第一行的指针。Parr[0]将指向第一行,Parr[1]将指向第二行,若要索引矩阵中的特定整数,可以使用Parr[row][column]。不,第二行不是指向数组的指针。它是指向数组第一个元素的指针。不,第二个不是指向数组的指针。它是指向数组第一个元素的指针。