- C语言中的指针是指 一类 数据类型:int指针类型,double指针类型,char指针类型等等。
- 任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。
指针变量声明
定义:
type *var-name;
//类型 * 变量名;
不论数据类型,指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。
*号标识该变量为指针类型,当定义多个指针变量时,在每个指针变量名前面均需要加一个 *,不能省略,否则为非指针变量。
例如:
int *p; // 一个整型的指针
double *p,*q; // 两个 double 型的指针
float *p,,q; // 一个浮点型的指针,一个浮点变量q
char *p; // 一个字符型的指针
初始化
int a,*p=&a;
解释:a在定义时就已经被分配地址了所以这样写没错
int a,*p;
p = &a;
解释:&a为地址,等价指针p,所以是同类型,可以这样赋值
指针;变量;地址的关系
总结:
- p为指针,存放a的地址,即指向a这个变量
- *p为指针所指地址内的内容,即a的值
- a为变量,即为a的值
- &a为地址,等价指针p
注意:
- 在使用已定义好的指针变量时,在变量名前面不能加 *
int *p,a;
*p=&a; //错误,指针变量是p而不是*p
int a,*p=&a; //正确
- 解释: p 前的 * 仅是定义指针变量 p 的标识,仍然是把 &a 赋给了 p,故是正确的赋值语句。
“野”指针
“野”指针:没有合法指向的指针,指向的地址未知!
int *pi,a; //pi未初始化,无合法指向,为“野”指针
*pi=3 //运行时错误!
a=*pi; //运行时错误!