指針
指針是一種類型的複合類型。
(1)指針本身是對象
(2)無須在定義時賦初值,未初始化指針使用之前必須指派。
在塊作用域内定義的指針若沒有初始化則是不确定值;在塊作用域外定義的指針若沒有初始化則預設初始化是0。
//定義指針的方法一
int a1 = 12;
int *ptr1;
ptr1 = &a1; //使用之前必須指派
printf("ptr1 = %d, *ptr1 = %d\r\n", ptr1, *ptr1);
//定義指針的方法二
int b1 = 12;
int *ptr2 = &b1;
printf("ptr2 = %d, *ptr2 = %d\r\n", ptr2, *ptr2);
printf("\r\n");
(3)指針類型需要與指向的變量的類型一緻
(4)不能定義指向引用的指針,如int &*p = &k;
另: int *& 是指針的引用,指針的引用一般在樹旋轉的時候會用到。
指針的值(即位址)
(1)指向一個對象
(2)指向緊鄰對象所占空間的下一個位置
(3)空指針,不指向任何對象
(4)無效指針,上述情況之外的其他值
空指針及指針指向變量值為0
指針為空指針和指針指向的變量值為0是不一樣的。
指針指針的變量值為0,說明指針指向這個變量,這個變量值為0,此時指針值為該變量的位址。
指針為空指針,說明指針不指向任何對象,指針值為0。
(1)使指針為空指針,可以用以下方法:
//方法一
int *ptr_a = nullptr;//或0、NULL
//方法二
int b = 12;
int *ptr_b = &b;
ptr_b = 0;
//方法3
int *ptr_c;
ptr_c = 0;
(2)使指針指向的變量值為0,可以用以下方法:
//方法一
int d = 12;
int *ptr_d = &d;
*ptr_d = 0;
//方法二
int e = 0;
int *ptr_e;
ptr_e = &e;//ptr_e = e;則錯誤
//方法三
int f = 0;
int *ptr_f = &f;
void*指針
是一種特殊指針,存放任何對象的位址。void*
(1)拿它和其他指針比較
(2)作為函數的輸入和輸出
(3)指派給另一個void*指針