【C语言-函数-函数定义】函数定义的“八股文”——咱们亲手盖一座小工厂

开发技术 作者: 精灵星空 SKY315.COM 更新于: 浏览: 294
码字发文不易,转载请注明出处【精灵星空 SKY315.COM】

上节课咱们说了,函数就是一个小工厂,你把原材料扔进去,它在里头给你加工,完了把成品吐出来。

那这节课咱们就来讲讲,在C语言里,这个“小工厂”到底是怎么盖起来的——也就是函数的定义。

说白了,函数定义就是一套固定的“八股文”格式,你照着这个格式写,编译器就认识它。格式长这样:

返回值类型 函数名(参数列表) {
    函数体;
    return 返回值;
}

看着有点晕?别怕,咱们把它拆成四个部分,一个个说。

第一部分:函数名——你这工厂叫啥?

就跟人要有名字一样,函数也得有个名字。你要给它起个能见名知意的名字。比如你要写一个计算两个数相加的函数,就叫add;要算圆面积的,就叫calcCircleArea。

C语言对函数名的要求跟变量名一样:字母数字下划线组成,不能以数字开头,别跟关键字重名。

第二部分:参数列表——工厂的“收料口”

函数要干活,总得有人给它喂材料吧?参数列表就是那个“收料口”。你在括号里写上需要什么东西,用逗号隔开。

比如你要写一个加法函数,需要两个整数来加,那参数就写成int a, int b——告诉编译器:我要两个整数,一个叫a,一个叫b,你给我准备好。

如果你这个函数不需要任何外部数据,括号里就写void,或者直接写个空括号。比如我想写一个函数,就是打印一行“Hello”,不需要你给它任何东西,那参数就是空的。

第三部分:返回值类型——工厂的“出货口”

工厂加工完了,得把成品递出来。这个“递出来”的东西是什么类型的,你要在函数名前面写清楚。

如果你这个函数算完要返回一个整数,前面就写int;要返回小数,就写float或double;要返回字符,就写char。

那如果这个函数干完活不需要往外递东西呢?比如它就是打印个菜单、显示个提示信息,干完就完了,不需要给你带回来啥。这种情况,返回值类型就写void——表示“啥也不返回”。

第四部分:函数体 + return——工厂的生产车间

花括号里面那一坨代码,就是工厂的生产车间,是你真正干活的地方。你需要什么原材料,从参数那里拿;你要出什么成品,用return语句送出去。

return的作用有两个:一是告诉你“我要返回这个值了”,二是把控制权交还给调用者——也就是返回到调用这个函数的地方。

来,咱们看一个完整的例子,写一个加法函数:

int add(int a, int b) {
    int result = a + b;
    return result;
}

翻译成人话就是:我盖了一个叫add的小工厂,它从外面接收两个整数(a和b),然后在车间里把它们加起来,放到一个叫result的盒子里,最后通过return把这个盒子递出去。因为这个工厂要递出去的是一个整数,所以我前面写了int。

这个函数写完,你就能在别的地方调用它了:

int x = add(3, 5);   // x就变成了8

你看,3和5被喂进了参数a和b,车间里算出了8,return把8递出来,赋值给了x。

有返回值的函数,return后面必须跟一个值,而且这个值的类型要跟函数前面声明的返回值类型匹配。 你声明了int,return了一个float,编译器虽然不一定会报错,但会给你截断,结果就不对了。

没返回值的函数,可以不用return,或者只写个return;,后面啥也不跟。

void printMenu() {
    printf("1. 加法\n");
    printf("2. 减法\n");
    printf("0. 退出\n");
    // 不需要return,干完活直接走人
}

最后,给同学们强调一句总结:

函数的定义不是让你背语法,而是让你养成一个习惯——在写代码之前先想清楚三件事:我这个函数要处理什么数据(参数)、处理后要给调用者一个什么结果(返回值类型)、中间怎么处理(函数体)。把这三点想明白了,函数定义就是照葫芦画瓢的事儿。