一、指针是什么?
int *p;
定义一个指针变量p。
因为p是局部变量,所以也遵循C语言局部变量的一般规律(定义局部变量并且未初始化,则值是随机的),所以此时p变量中存储的是一个随机的数字。
在使用指针前,需进行绑定,才能解引用。
二、符号
1、星号 *
(1) C语言中*可以表示乘号,也可以表示指针符号。
(2)星号在用于指针相关功能的时候有2种用法:第一种是指针定义时,*结合前面的类型用于表明要定义的指针的类型;第二种功能是指针解引用,解引用时*p表示p指向的变量本身。
2、取地址符 &
使用时直接加在一个变量的前面,然后取地址符和变量加起来构成一个新的符号,这个符号表示这个变量的地址。
三、指针的定义并初始化
int a = 32; int *p = &a;
//或者
int a = 32; int *p; p=&a;
四、左值和右值
赋值运算符左边的叫左值,右边的叫右值。
当一个变量做左值时,编译器认为是这个变量所对应的那个内存空间;
当一个变量做右值时,编译器认为是这个变量的值。
五、野指针
指针指向的位置是不可知的,很可能触发运行时的段错误。野指针的错误来源是指针定义后没有初始化,也没有赋值,然后去解引用。
如何防止野指针?
第一点:定义指针时,同时初始化为NULL
第二点:在指针解引用之前,先去判断这个指针是不是NULL
第三点:指针使用完之后,将其赋值为NULL
第四点:在指针使用之前,将其赋值绑定给一个可用地址空间
六、NULL
在C++中 NULL是0; 在C中是强制类型转换为void * 的 0。
七、const
const是用来修饰变量,表示这个变量是常量。
第一种:const int *p; //p指向的变量是const的
第二种:int const *p; //p指向