指针
指针是一种类型的复合类型。
(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*指针