C语言入门理解指针
本文章为本人原创,适合于刚入坑c语言,对于指针的定义和用法模糊不清的同学,如有不正,请各位指出。
从根本来说,指针变量也是变量,只是int变成了int *,以此类推。只不过指针变量里面放的内容是普通变量在存储空间的地址(某种奇怪的16进制地址格式,感兴趣可自行百度)
定义指针变量的格式:int/double/...* studentp;
所以在给指针变量赋值的时候就应该:studentp=&student;
那么如何通过指针来获取student的值就可以直接:某变量=*studentp; 这里一定不要和定义指针变量搞混!!!
函数指针和普通的指针其实一样,无非就是把函数名给了一个函数指针变量,在获取指针变量指向的函数的时候也是指针变量前面加一个*号
那么有人问了,我写的代码以前也没用过指针变量照样运行,那指针变量是多此一举的东西吗?
必然不是的,一个很经典的问题:swap交换——如果要定义一个swap函数,交换两个变量的值,如何实现?
有人说以下代码就行,并没有用到指针呀!
1 #include <stdio.h> 2 3 void swap(int a,int b); 4 int main(void) { 5 printf("小柠檬开课了!\n"); 6 7 int a=5,b=6; 8 swap(a,b); 9 printf("主函数内部a=%d,b=%d\n",a,b); 10 return 0; 11 } 12 void swap(int a,int b){ 13 int tmp; 14 tmp=a; 15 a=b; 16 b=tmp; 17 printf("swap函数内部a=%d,b=%d\n",a,b); 18 }
输出:
答:c语言编程是面向过程的编程,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。如果我需要继续在主函数里面用到ab交换完成的值,那么这个函数写的就很失败,而且c语言返回值只能有一个,就无法使用返回的操作得到结果。
有人可能会问,为什么我swap里面分明让ab交换了,结果在main函数里面没有用呢?
答:这个就涉及到运行机制的原理了,每一个函数都独占一个内存空间,swap空间的ab和main空间的ab显然不是同一对ab,所以无论swap怎么折腾都不能影响main里面的东西。
如果用到指针变量的话,那么结果就会不一样。
现在更改成指针变量的代码:
1 #include <stdio.h> 2 3 void swap(int *a,int *b); 4 int main(void) { 5 printf("小柠檬开课了!\n"); 6 7 int a=5,b=6; 8 swap(&a,&b); 9 printf("主函数内部a=%d,b=%d\n",a,b); 10 return 0; 11 } 12 13 void swap(int *a,int *b){ 14 int tmp; 15 tmp=*a; 16 *a=*b; 17 *b=tmp; 18 printf("swap函数内部a=%d,b=%d\n",*a,*b); 19 }
输出:
这里swap的两个形参是指针变量,用于接收main函数传来的a(main)和b(main)的地址,swap中指针变量a(swap)和b(swap)存着a(main)和b(main)的地址,从而通过*a和*b的方式直接更改main中a(main)和b(main)的值。
这就是运用指针的好处。
上一篇: 杀死指定进程名称的小VBS
下一篇: 浅谈Node事件循环的大致流程