C语言自定义函数是用户根据业务需求自行编写的函数,它可以将重复的逻辑封装成独立模块,减少代码冗余,提升程序的可维护性。和C语言内置的标准库函数不同,自定义函数需要开发者自己完成定义、声明和调用三个核心步骤。

C语言自定义函数的基本语法
自定义函数的完整定义格式如下:
返回值类型 函数名(参数列表) {
// 函数体,实现具体逻辑
return 返回值; // 如果返回值类型为void,可以省略该语句
}
各个部分的含义如下:
- 返回值类型:指定函数执行完成后返回的数据类型,比如
int、float、char等,如果函数不需要返回数据,就使用void作为返回值类型。 - 函数名:自定义的函数标识,需要符合C语言标识符命名规则,建议见名知意,比如计算两个数之和的函数可以命名为
add。 - 参数列表:接收调用函数时传入的数据,格式为
数据类型 参数名1, 数据类型 参数名2,如果没有参数,可以用void或者留空表示。 - 函数体:用花括号包裹的代码块,实现函数的具体功能。
- return语句:将函数的执行结果返回给调用者,返回值的类型需要和定义的返回值类型一致,返回值类型为
void时不需要写return语句。
无参数无返回值的自定义函数示例
这类函数不需要接收外部传入的数据,执行完成后也不返回结果,通常用于执行固定的操作。
#include <stdio.h>
// 定义无参数无返回值的函数,打印欢迎信息
void print_welcome() {
printf("欢迎学习C语言自定义函数n");
}
int main() {
// 调用自定义函数
print_welcome();
return 0;
}
上面的代码中,print_welcome函数没有参数,返回值类型是void,函数体内部直接打印提示信息,在main函数中直接通过函数名加括号的方式调用即可。
有参数有返回值的自定义函数示例
这是最常用的函数类型,需要接收外部传入的参数,处理后返回对应的结果。
#include <stdio.h>
// 定义函数,计算两个整数的和,返回结果
int add(int a, int b) {
int sum = a + b;
return sum; // 返回计算结果
}
int main() {
int num1 = 10;
int num2 = 20;
// 调用add函数,传入两个参数,接收返回值
int result = add(num1, num2);
printf("两个数的和是:%dn", result);
return 0;
}
这里add函数定义了两个int类型的参数a和b,返回值类型是int,函数体内部计算两个参数的和并通过return返回,调用时传入num1和num2的值,用result变量接收返回值。
函数声明的作用和使用
如果自定义函数写在main函数的后面,在main函数中调用该函数时,需要先做函数声明,否则编译器会报错,因为编译器是从上到下编译代码的,还没读到函数定义就先遇到了函数调用。
函数声明的格式和函数定义的首部一致,后面加一个分号即可:
返回值类型 函数名(参数列表);
下面是函数声明的示例:
#include <stdio.h>
// 函数声明,告诉编译器存在这个函数
int multiply(int a, int b);
int main() {
int x = 5;
int y = 6;
int product = multiply(x, y);
printf("两个数的乘积是:%dn", product);
return 0;
}
// 函数定义,放在main函数后面
int multiply(int a, int b) {
return a * b;
}
如果自定义函数写在main函数之前,就可以省略函数声明,因为编译器先读到函数定义,再遇到调用时已经知道函数的相关信息。
自定义函数的参数传递规则
C语言自定义函数的参数传递是值传递,也就是调用函数时,实际参数的值会复制一份给形式参数,函数内部修改形式参数的值,不会影响实际参数的值。
#include <stdio.h>
// 尝试修改传入的参数值
void change_value(int num) {
num = 100;
printf("函数内部修改后的值:%dn", num);
}
int main() {
int original = 50;
change_value(original);
printf("函数外部的值:%dn", original);
return 0;
}
运行上面的代码会发现,函数内部打印的num是100,但是main函数中打印的original还是50,这就是值传递的特点,形式参数和实际参数是两块独立的内存空间,修改互不影响。
常见问题说明
函数返回值类型和return返回值类型不一致怎么办
如果return返回的值类型和函数定义的返回值类型不一致,编译器会自动进行类型转换,如果转换不合法就会报错。比如函数定义返回值类型是int,return返回float类型的值,会自动截断小数部分转成int。
函数可以没有参数吗
可以,参数列表可以留空或者写void,表示函数不需要接收外部传入的参数。
函数可以返回多个值吗
C语言的函数不能直接返回多个值,如果需要返回多个结果,可以通过指针参数间接实现,或者将多个结果封装成结构体返回。