[英]C++ Array address allocation to pointers
我對指針的概念很陌生,最近遇到了以下代碼行:
int arr[]={1,2,3};
int (*p)[3] = &arr;
上面的代碼行和下面的代碼有什么區別:
int arr[]={1,2,3};
int *p = arr;
為何會產生錯誤:
int arr[]={1,2,3};
int *p = &arr;
類型差異
p
in的類型
int (*p)[3] = &arr;
是int (*)[3]
,即指向3
int
s數組的指針。
p
中的類型:
int *p = arr;
只是int*
,即一個指向int
的指針。
作為結果,
在第一種情況下,
*p
的結果為3個int
的數組,即int [3]
。
在第二種情況下
*p
值只是一個int
。
要獲取arr
的第一個元素,在第一種情況下,您必須使用(*p)[0]
或p[0][0]
。
要獲取arr
的第一個元素,在第二種情況下,您必須使用*p
或p[0]
。
要獲取arr
的最后一個元素,在第一種情況下,您必須使用(*p)[2]
或p[0][2]
。
要獲取arr
的最后一個元素,在第二種情況下,您必須使用*(p+2)
或p[2]
。
它們只是不同的東西。
int arr[]={1,2,3};
int (*p1)[3] = &arr; // pointer to array (of 3 ints)
int *p2 = arr; // pointer to int
p1
是一個數組(3個整數)的指針,然后初始化為指向arr
。 p2
是一個指向int的指針,由於數組到指針的衰減 ,它被初始化為指向arr
的第一個元素。
然后,您可以將它們用作:
(*p1)[0]; // same as arr[0]
p1[0][1]; // same as arr[1], note p1[1] will be ill-formed.
p2[0]; // same as arr[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.