天天看點

指針、空指針、指針值、void*指針

    指針

    指針是一種類型的複合類型。

(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*指針