int * p、int * p 、int* p的区别及 指针*p的使用分析
C语言指针理解
- 1. 指针指的是啥。
- 2. int * p、int* p的区别。
- 3. 指针*p的使用。
1. 指针指的是啥。
指针也是一种C语言的数据类型,就像int、char这样。不过int存放的是整型的数据,char存放的是字符型的数据,而指针,存放的是内存地址。
我们通常这样去定义一个变量score:
int score;
此时,score已经被分配到了一个4字节的内存地址。
接着,我们通过输入,给变量score赋值,
scanf("%d", &score);
注意到了吗?score前面还有个地址操作符&,这表示:将所输入的XXX存放到score所在内存地址的内容上。
你输入的是啥,那么score就是啥。
如果我们后期更改了score的值,score所占的内存地址也是不变的。就像无论你怎么装修你的新家,里面放的是真皮沙发,还是布艺沙发,你家的门牌号还是不变的。
score = 100; // score的内存地址还是不变滴
早先的程序猿们发现了这个神气的特性,脑瓜子灵机一动:只要我获取到某个变量所被分配的内存地址,那么,即使该变量就像孙猴子一样七十二变,也逃不出我的手掌心了。
于是,为了更好的存储变量的内存地址,指针诞生了。
// 定义一个int类型的指针变量p
int *p = &score;
&score: 就是变量score被分配到的内存地址
p本身: score的内存地址
*p: p所存储的内存地址指向的内容,这里即score
2. int * p、int* p的区别。
int * p、int * p 、int* p三者是一样的,都指的是创建一个int类型的指针变量p。
3. 指针*p的使用。
#include "stdio.h"
int main() {
int a = 1;
int *p = &a; // 定义一个int类型指针P,用来存放int类型的变量a的地址
int q = *p; // 定义一个获得P指针存放的地址所对应的内容
printf("a = %d\n", a); // 输出a的值
printf("p = %d\n", p); // 输出p所存放的内容 —— 即a的地址
printf("*p = %d\n", *p); // 输出p所存放的内容(即a的地址)所对应的值内容
printf("q = %d\n", q); // 输出p所存放的内容(即a的地址)所对应的值内容
return 0;
}
结果: