普通指標與陣列指標的區別

2021-09-10 09:15:05 字數 1690 閱讀 1389

去部落格設定頁面,選擇一款你喜歡的**片高亮樣式,下面展示同樣高亮的**片.

二維陣列的幾個符號的測試

1、a等同於&a[0]

2、a[0]等同於&a[0][0]

3、在數值上 a、&a、a[0]、&a[0]、&a[0][0] 是相等的,但是在型別上面是有區別的。

#include 

#include

main()

,};int

(*p1)[5

];// 陣列指標

int *p2;

// 一般指標

int i,j;

p1 = a;

// 等同 p1 = &a[0]; // 指向二維陣列的陣列名

p2 = a[0]

;// 等同 p2 = &a[0][0]; // 指向二維陣列的第一維陣列

printf

("a = %p.\n"

, a)

;// a 型別是 int (*)[5]

printf

("&a = %p.\n"

,&a)

;// &a 型別是 int (*)[2][5]

printf

("a[0] = %p.\n"

, a[0]

);// a[0] 型別是 int *

printf

("&a[0] = %p.\n"

,&a[0]

);// &a[0] 型別是 int (*)[5]

printf

("a[0][0] = %d.\n"

, a[0]

[0])

;// a[0][0] 型別是 int

printf

("&a[0][0] = %p.\n"

,&a[0]

[0])

;// &a[0][0]型別是 int *

printf

("a[0][2] = %d.\n",*

(*(p1+0)

+2))

;// a[0][2] = 3

printf

("a[1][2] = %d.\n",*

(*(p1+1)

+2))

;// a[1][2] = 8

printf

("a[0][2] = %d.\n",*

(p2+2)

);// a[0][2] = 3

printf

("a[0][4] = %d.\n",*

(p2+4)

);// a[0][4] = 5

printf

("a[1][4] = %d.\n",*

(p2+9)

);/*利用一般指標*p2遍歷陣列輸出*/

for(i=

0;i<

2;i++

)printf

("\n");

}/*利用陣列指標*p1遍歷陣列輸出*/

for(i=

0;i<

2;i++

)printf

("\n");

}system

("pause");

//需包含這個標頭檔案#include

}

vector push back普通指標的感想

include include vector push back是變數內容的拷貝,而且是深拷貝,對於資料來說,變數中儲存的內容就是變數值。對於指標來說,變數內儲存的內容是指標指向的記憶體位址。1 2 3 4 5 5 5 5 1 2 3 4 void test1 std cout std endl n...

對陣列名取位址賦值給陣列指標與普通指標的區別

以下紅色字型的說法是錯誤的 使用一級指標來接受 arr,只是表示乙個普通的一級指標,它並沒有接收到 arr賦來的跨度,而只接收到了位址而已。所以,p1的跨度只有4個位元組。它儲存的位址所表示的是arr這個陣列的首元素位址 相當於在賦值過程中,arr退化為了arr,失去了陣列本來擁有的跨度。此時p1 ...

普通指標到智慧型指標的轉換

普通指標到智慧型指標的轉換 int iptr new int 42 shared ptr int p iptr 智慧型指標到普通指標的轉換 int pi p.get 注意的地方 那就是不要將智慧型指標與普通指標混用。如果專案允許,堅持使用智慧型指標,避免原生指標。智慧型指標與普通指標需要特別特別特別...