指针、空指针、指针值、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*指针





你可能感兴趣的:(C/C++)