簡體   English   中英

C ++數組地址分配給指針

[英]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的第一個元素,在第二種情況下,您必須使用*pp[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM