xdm,让我听到你们海绵宝宝般的呐喊:“我准备好了,我准备好了,我准备好了。”好的,既然准备好了,那就让我们一起来学习指针,都说它难,我偏不信😕。来了哦,来了。
1、指针是什么
就好比你要追一个帅哥,咱起码得知道他是谁,是干啥的吧。咱们先从他的朋友下手,内存兄弟。。。大家都知道,当你在程序中定义了一个变量后,系统便会给它分配内存单元,变量类型不一样,内存空间便不一样,字符型变量是1个字节,整型是4个字节就像住旅馆一样,不一样的身份,会给你安排不一样的房间。内存区的每一个字节都有一个编号,称之为“地址”,就是你的门牌号。在地址所标志的内存单元中存放的数据就是房间里的旅客。
有了门牌号,不就有了详细地址嘛,还怕追不到帅哥嘛🧐。通过地址能够找到我们所需要的变量单元,也就是说,地址指向变量单元(某门牌号指向某一间房),我们将地址形象化地称之为“指针”。记住记住,指针是一个地址,指针是地址,指针地址,地址,地址!!!
2、指针变量
指针是一个地址,那指针变量就是存放地址的变量,指针变量的值就是地址(还记得什么是地址吗?对,就是指针,指针,指针)。
下面,给大家浅浅的表演个举栗子↓↓↓
/*通过指针变量访问整型变量*/
#include<stdio.h>
int main()
{
int a = 100, b = 10;
int* pointer_1, * pointer_2;/*定义指向整型数据的指针变量*/
pointer_1 = &a;/*使pointer_1指向a,把a的地址赋给指针变量pointer_1*/
pointer_2 = &b;/*使pointer_2指向b,把的地b址赋给指针变量pointer_2*/
printf("a = % d, b = % d\n", a, b);
printf("*pointer_1=%d,*pointer_2=%d\n", *pointer_1, *pointer_2);
return 0;
}
结果:a = 100, b = 10
*pointer_1=100,*pointer_2=10
& 为取址运算符,&a就是变量a的地址;
✳ 为指针运算符,✳p代表指针变量p指向的对象。
▲注意:程序中两次出现* pointer_1, * pointer_2,含义是不同的。
{ int* pointer_1, * pointer_2; }中表示定义两个指针变量 pointer_1与 pointer_2,它们前面的“ * ”表示该变量是指针变量。
而{ printf("*pointer_1=%d,*pointer_2=%d\n", *pointer_1, *pointer_2); }中的 *pointer_1,和✳pointer_2则代表指针变量 pointer_1和pointer_2所指向的变量。
定义指针变量
吃了上面的栗子,大家该猜到怎样定义指针变量了吧。没错,就是→ 类型名 指针变量
int✳pointer_1, *pointer_2;
同时,也可以在定义它时对它初始化,int *pointer_1=&a, * pointer_2=&b;
▲注意:指针变量名是 pointer_1和pointer_2,而不是 ✳pointer_1和✳pointer_2
肿么样,学废了吗😎