一 、定义指针变量
1.1 定义指针变量
与定义普通变量非常类似,不过要在变量名前面加星号*,格式为:
datatype *name; 或者
datatype *name = value;
*表示这是一个指针变量,datatype表示该指针变量所指向的数据的类型 。
例如:int *p1;
1.2 赋值指针变量
p1 是一个指向 int 类型数据的指针变量,至于 p1 究竟指向哪一份数据,应该由赋予它的值决定。再如:
int a = 100;
int *p_a = &a;
在定义指针变量 p_a 的同时对它进行初始化,并将变量 a 的地址赋予它,此时 p_a 就指向了 a。值得注意的是,p_a 需要的一个地址,a 前面必须要加取地址符&,否则是不对的。
1.3 修改指针变量
和普通变量一样,指针变量也可以被多次写入,只要你想,随时都能够改变指针变量的值。
*是一个特殊符号,表明一个变量是指针变量,定义 p1、p2 时必须带。而给 p1、p2 赋值时,因为已经知道了它是一个指针变量,就没必要多此一举再带上,后边可以像使用普通变量一样来使用指针变量。也就是说,
定义指针变量时必须带 *,给指针变量赋值时不能带 *。
//定义普通变量
float a = 99.5, b = 10.6;
char c = '@', d = '#';
//定义指针变量
float *p1 = &a;
char *p2 = &c;
//修改指针变量的值
p1 = &b;
p2 = &d;
假设变量 a、b、c、d 的地址分别为 0X1000、0X1004、0X2000、0X2004,
下面的示意图很好地反映了 p1、p2 指向的变化:
需要强调的是,p1、p2 的类型分别是float*和char*,
而不是float和char,它们是完全不同的数据类型,读者要引起注意。
指针变量也可以连续定义,例如:
int *a, *b, *c; //a、b、c 的类型都是 int*
注意每个变量前面都要带*。如果写成下面的形式,
那么只有 a 是指针变量,b、c 都是类型为 int 的普通变量:
int *a, b, c;
二 、使用指针变量
2.1 通过指针变量取得数据
指针变量存储了数据的地址,通过指针变量能够获得该地址上的数据,格式为:
*pointer;
这里的*称为指针运算符,用来取得某个地址上的数据,请看下面的例子:
#include <stdio.h>
int main(){
int a = 15;
int *p = &a;
printf("%d, %d\n", a, *p); //两种方式都可以输出a的值
return 0;
}
运行结果:
15, 15