去部落格設定頁面,選擇一款你喜歡的**片高亮樣式,下面展示同樣高亮的**片
.
二維陣列的幾個符號的測試
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 注意的地方 那就是不要將智慧型指標與普通指標混用。如果專案允許,堅持使用智慧型指標,避免原生指標。智慧型指標與普通指標需要特別特別特別...