vlambda博客
学习文章列表

【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*,而不是floatchar

3.咋通过指针取数据呢?

如:

 int a = 15; int *p = &a; printf("%d, %d\n", a, *p); //两种方式都可以输出a的值

输出:15,15

3.咋通过指针修改数据呢?

#include <stdio.h>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,可以将另外的一份数据赋值给它,也可以将它赋值给另外的一个变量。

再如:通过指针交换两个数据

#include <stdio.h>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