C语言学习第三阶段-函数的封装

一、为什么要封装函数。

1、函数封装后可以提高我们代码的阅读性,可以快速的略过一些封装函数,直接找到main()函数,从main()函数开始再次有序的阅读代码。 2、可以多次使用,不在需要我们去复制粘贴,一次购买,终身受益。 3、可移植性高,安全性高,不再将代码展示出来,通过函数调用直接使用。

二、基础函数的封装。 2.1无参数函数的封装
基础函数的封装就是将代码中需要的代码打包,并将这个包裹命名,在后续程序中,我们直接使用这个包裹,而不需要重新编写一段代码。
例一:我们用程序来代码来简单操作一下一个简单的函数封装。这是一个简单的不传参数的函数。通过函数名加括号我们可以调用对应的函数。
void xunhuan() { int a; for(a = 1; a<5; a++) { printf("%d\n",a); } } int main() { xunhuan(); return 0; }

C语言学习第三阶段-函数的封装
文章图片

2.2 有参数函数的封装。
2.2.1 值传递
#include #include void func(int x,int y) { int temp; temp=x; x=y; y=temp; printf("x=%d y=%d\n",x,y); } int main() { int a,b; printf("请输入两个数\n"); scanf("%d %d",&a,&b); func(a,b); printf("a=%d b=%d\n",a,b); system("pause"); return 0; }

【C语言学习第三阶段-函数的封装】C语言学习第三阶段-函数的封装
文章图片
可以看到,在封装的函数func里面,我们通过一个中间变量temp对x和y进行了位置的互换,在封装函数里面的x与y确实是交换了位置,但是我们调用封装函数过后却没有对a和b进行位置的交换。并不是我们的函数没有调用成功,而是我们没有正确的理解。
封装函数里面的x与y我们将他们看作两个人,对应的x与y的值我们看作他们自己有的钱。同样的对a和b也成立。
形参(也就是x和y)他们有自己的兜,x装了20块钱,y装了30块钱。
实参(也就是a和b)他们也有自己的兜,a装了20块钱,b装了30块钱。
无论x和y怎么交换,那是x和y的事情。无法对a和b造成影响(主要的解释就是:形参和实参变量各自有不同的存储单元,实参有一个存储空间,行参有一个存储空间,将实参单值传递给形参,在形参的存储空间里进行的运算,但是这种运算不会对实参的存储空间产生影响。)
2.2.2 地址传递
那我们如何才能够将a和b也交换一下呢,这就是地址传递函数:
我们将之前的代码改一下:
#include #include void func(int *x,int *y) { int temp; temp = *x; *x = *y; *y = temp; printf("x=%d y=%d\n",*x,*y); } int main() { int a,b; printf("请输入两个数\n"); scanf("%d %d",&a,&b); func(&a,&b); printf("a=%d b=%d\n",a,b); system("pause"); return 0; }

C语言学习第三阶段-函数的封装
文章图片
我们将代码修改过后,我们就可以使a和b的值交换了,这和刚才的却别就在x和a都使用的一个兜,y和b也只使用的一个兜,(我们对x和y取地址,使形参和实参共用一个地址),一旦x和y交换,那么a和b也会进行交换,所以我们要想通过形参对实参进行操作,就需要对形参进行取地址。
对于有参数的函数进行传递,我们一般都使用值传递和地址传递这两种,还有一种引用传递,我没怎么看就不写了。
关于函数的封装我就写这么多了,祝福大家新年快乐。
师承上官可编程!

    推荐阅读