C语言函数功能的强大和入坑体会

       在以前的学习过程中都是直接在主函数中实现诸多功能的表达,会导致主函数主体看上去冗余复杂不好理解,对于初学者来说一般实现的功能不会太多,所以不会体会到函数的优越性,如果一个项目要实现复杂的功能,设计者把所有的实现过程全写在主函数内,由于代码量的大幅增加会导致代码运行的效率降低,对于后期的代码修改优化也会增加一定的难度。所以渐渐学会使用函数来实现及具体的功能对我们以后的学习会更有帮助。

举个例子,比如我们要写一个输出从1900到2021年之间是闰年的年份的简单代码,首先在主函数中使用循环实现1900到2021的输出,在主函数外设计一个闰年判断函数,在主函数中调用它,就能实现闰年的显示输出,这样使用的优点在于如果你想判断其他年份只需要再调用该函数即可,就不用每次去重写代码降低效率。

说了函数有多么多么优秀好用,那现在也简单来说说我在函数设计调用中众多坑,经常就是一不小心就写出了bug,时常还找不出哪里出错了。下面也用一些实际练习是入过的坑来聊一聊,我第一次被坑就是用函数写两个数据之间的交换,不使用函数的话是很好实现的,就是多引用一个空变量来实现两个数据的交换,用函数实现大体思路基本一样,把主函数中的实参数据传递给函数中的形参接收,从而在函数中实现数据的替换,但实践告诉我们直接把实参传递给形参不能实现该功能。后来经过调试发现形参实例化后相当于实参的一份临时拷贝,形参具有独立的内存空间,所以不能进行交换。如果要实现就需要在函数中就要使用指针来接收变量的地址,利用指针的解引用操作指向地址里的值从而进行交换,因为是指针接收就不会形成独立的空间,利用指针就能进行数据访问来实现功能。另外还有就是数组传参仅仅传的是数组首元素地址,而不是整个数组元素,本质上函数中的数组就是一个指针指向元素首地址,因此在函数中不能求数组元素个数,该过程只能在函数体之外。

以下有参考代码:

#include<stdio.h>


void swap(int* pa, int* pb)//使用指针创建一个数据替换函数,pa接收a的地址,pb接收b的地址


{

int tmp = 0;//定义一个零变量

tmp = *pa;//解引用指针数据值,实现数据交换

*pa = *pb;

*pb = tmp;

}

int main()

{

int a = 19;

int b = 90;

printf("%d %d\n", a, b);

swap(&a, &b);//调用数据交换函数实现交换

printf("%d %d\n", a, b);

return 0;

}


猜你喜欢

转载自blog.51cto.com/15101214/2675429