指向一组int的指针
有什么区别:
//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
在第一个代码示例中,
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*
我们可以有一个指向整数或指向foat的指针的方式,我们还可以有一个指向数组的指针吗? 答案是“是”。但是,指向数组的指针的声明有点笨拙。
例如,声明int(* q)[4]意味着q是指向4整数数组的指针。 在你的代码中
int(* parr)[10]表示parr是一个指向10整数数组的指针。
但是int * parr = arr只是指向arr [10]的oth元素的指针。
所以假设你指向任何指向arr的指针[10]。 在第二种情况下做parr ++。parr将移动到位置arr [10]formsarr [0]。 但是在第二种情况下做parr ++。parr将移动到位置arr [1]formsarr [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]