指针初步认知
指针的运算符
- int *score,score1=98
定义一个int 型的指针变量,可以理解为定义了int *型的变量score。 - score=&score1 &表示取地址
把score1的地址放在score指针变量中。 - cout<<*score;
这里的 * 表示间接引用,取出这个指针存放的地址所指向的变量,即98。
指针初始化
- int age,*add_age=&age //add_age初始化为指向整型量age。
- 任何类型指针都可以赋以0值(NULL),即当前该指针并不指向该类型的任何一个变量,也不是指向地址为0的内存空间。称空指针。
- 常量是不可寻址的,add_age=&10是错的。
常变量是可寻址的,const double PI=3.14;const double *pointer=&PI; //指向常量PI的指针必须是常量指针。
指针赋值
- 同类型指针可以相互赋值
int val1=18,val2=20,
*p_val1=&val1,
*p_val2=&val2,
p_val1=p_val2,
指针常量和常量指针
- 常量指针:
double a,b;
const double *pointer=&a;
*pointer=b;//错误
pointer=&b;//成功
常量指针是一个指向常量的指针,其初始化时指向的变量的值不可以通过该指针改变,但指针指向的地址可以改变。简单来说就是地址可变值不变。 - 指针常量:
double a,b;
double * const pointer=&a;
*pointer=b; //正确
pointer=&b; //错误
指针常量,指针本身是常量,其初始化时所指向的地址是不可改变的,但它指向的目标a的值是可以改变的。简单来说就是地址不变值可变。
注意
- 指针变量不可以随意地赋一个内存地址,我们并不知道那个内存地址中有什么,这种操作在程序中非常危险。
- C语言的指针容易失控,在C++中增加了引用类型,它具有指针的主要功能,但限制了灵活性,使用更加安全。建议在函数参数传递中,能用“引用”时绝不用“指针”。