【C语言篇】No2指针变量
1.啥是指针变量?
2.指针变量咋定义呢?
定义指针变量与定义普通变量非常类似,不过要在变量名前面加星号 * ,格式为:
datatype *name; 或者 datatype *name = value;
如:
int *p1;
//也或者:
int a = 100;
int *p = &a;
如:
//定义普通变量
float a = 99.5, b = 10.6;
char c = '@', d = '#';
//定义指针变量
float *p1 = &a;
char *p2 = &c;
//修改指针所指向的地址
p1 = &b;
p2 = &d;
这里需要注意: * 是一个特殊符号,表明一个变量是指针变量,定义 p1、p2 时必须带 * 。而给 p1、p2 赋值时,因为已经知道了它是一个指针变量,就没必要多此一举再带上 * ,后边可以像使用普通变量一样来使用指针变量。也就是说,定义指针变量时必须带 * ,给指针变量赋值时不能带 * 。
并且:p1、p2 的类型分别是float*和char*,而不是float和char。
3.咋通过指针取数据呢?
如:
int a = 15;
int *p = &a;
printf("%d, %d\n", a, *p); //两种方式都可以输出a的值
输出:15,15
3.咋通过指针修改数据呢?
int main(){
int a = 15, b = 99, c = 222;
int *p = &a; //定义指针变量
*p = b; //通过指针变量修改内存上的数据
c = *p; //通过指针变量获取内存上的数据
printf("%d, %d, %d, %d\n", a, b, c, *p);
return 0;
}
输出: 99,99,99,99
*p 代表的是 a 中的数据,它等价于 a,可以将另外的一份数据赋值给它,也可以将它赋值给另外的一个变量。
再如:通过指针交换两个数据
int main(){
int a = 100, b = 999, temp;
int *pa = &a, *pb = &b;
printf("a=%d, b=%d\n", a, b);
/*****开始交换*****/
temp = *pa; //将a的值先保存起来
*pa = *pb; //将b的值交给a
*pb = temp; //再将保存起来的a的值交给b
/*****结束交换*****/
printf("a=%d, b=%d\n", a, b);
return 0;
}
4.容易晕的地方
*&a 和 &*pa