手机版

C语言入门理解指针

时间:2020-03-13 来源:互联网 编辑:宝哥软件园 浏览:

本文章为本人原创,适合于刚入坑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("小柠檬开课了!
");
 6     
 7     int a=5,b=6;
 8     swap(a,b);
 9     printf("主函数内部a=%d,b=%d
",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
",a,b);
18 }

输出:

 C语言入门理解指针

答: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("小柠檬开课了!
");
 6     
 7     int a=5,b=6;
 8     swap(&a,&b);
 9     printf("主函数内部a=%d,b=%d
",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
",*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)的值。

这就是运用指针的好处。

版权声明:C语言入门理解指针是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐