c语言函数从入门到精通:定义调用+参数传递+实战案例全解析

admin C语言 9


刚开始学 C 语言的时候,是不是总觉得函数这块特别难?我当初学时就总搞不懂,为啥要弄个函数出来,直接把代码堆一起不行吗?后来写了几百行代码才明白,不用函数的话,代码乱得像一团乱麻,改个地方都得翻半天。今天就从头到说说函数那点事,从怎么定义到怎么用,再到参数怎么传,最后带个实战例子,希望能帮到跟我当初一样迷糊的朋友。
先说说函数到底是个啥。其实说白了,函数就是一段能重复用的代码块。比如你经常个计算圆面积的代码,每次用都复制粘贴多麻烦?把它做成函数,想用的时候喊一声函数名,它就自己跑起来了。就像家里的洗衣机,你不用每次都研究怎么注水、怎么甩干,按个按钮就行,函数就相当于那个按钮背后的一套流程。
怎么定义函数呢?其实格式挺固定的。一般是 “返回值类型 函数名 (参数列表) { 代码块 }”。举个例子,想做个加两个数的函数,就可以写成 “int add (int a, int b) { return a + b; }”。这里的 int 是说这个函数最后会返回一个整数,add 是函数名,括号里的 a 和 b 是要传入的参数,大括号里就是具体的计算步骤。
有朋友可能会问,返回值类型要是没东西返回咋办?那就用 void,比如 “void printHello () { printf ("Hello"); }”,这个函数就只负责打印,不用返回啥。我当初总忘写返回值类型,编译器老报错,后来记牢了 “要么写具体类型,要么写 void”,就少错多了。
再说说函数怎么调用。定义完了不用等于白搭,调用其实特简单,就写函数名加括号,括号里给参数就行。比如刚才的 add 函数,想算 3 加 5,就写 “int sum = add (3, 5);”,sum 里就会存着 8。是不是很方便?
不过调用的时候得注意,参数的类型和数量得跟定义时一致。比如 add 函数要两个 int 型参数,你要是传个小数进去,结果可能就不对了。有个网友说,“之前传了个 float 型的数给 int 参数,算出来的结果差老远,查了半天才发现是这问题”,可不是嘛,这坑我也踩过。
参数传递这块,新手容易晕。其实主要有两种方式:值传递和地址传递。值传递就是把参数的值复制一份给函数里的变量,函数里改了,外面的变量不变。比如 “void change (int x) { x = 10; }”,调用的时候传个 a 进去,a 的值不会变。
地址传递就不一样了,传的是变量的地址,函数里改了,外面的变量也会变。用指针就行,比如 “void change (int *x) { *x = 10; }”,调用时传 & a,a 就真变成 10 了。我当初理解这个花了好几天,后来画了张内存图才明白,值传递是 “复印了一份文件改”,地址传递是 “直接在原文件上改”。
实战案例就来个简单的吧,做个计算学生平均分的函数。步骤大概是这样:先定义一个函数,参数是分数数组和学生数量,返回值是平均分;然后在函数里遍历数组求和,再除以数量;最后在 main 函数里调用它,输出结果。
代码大概长这样:
float average (int scores [], int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += scores [i];
}
return sum / (float) n;
}
main 函数里就定义个分数数组,比如 {80, 90, 85},然后调用 average 函数,就能得到平均分了。有朋友用了这个例子说,“原来函数结合数组这么方便,之前算平均分写了一堆重复代码,现在几行就搞定了”。
其实学函数最重要的是多练,刚开始可以照着例子写,慢慢就有感觉了。我当初写了十几个小函数,比如求最大值、判断素数啥的,写着写着就发现,函数能让代码清爽太多,改起来也方便。
最后想说,函数看着复杂,其实就是 “定义一套规则,然后反复用”。别害怕出错,编译报错了就一点点找原因,参数不对就检查类型,返回值错了就看看定义。多写多练,慢慢就精通了。希望这些能帮到你,加油呗!

标签: 一团乱麻 printHello

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~