C语言使用函数的优点:
以下是 C 中函数的一些主要优点:
- 代码重用性(reuse):
我们可以多次调用 C 函数。
因此,无需一遍又一遍地编写相同的代码。
- 代码优化:
C 函数有助于优化 C 程序,因为我们不需要编写太多代码。
C语言函数声明的语法
return_type function_name(data_type parameter, data_type parameter) { // 要执行的代码 }
函数声明/原型示例
#include <stdio.h> void display(int x); // 函数声明、函数原型 int main() { int a=1; display(a); // 调用函数 return 0; } void display(int x) // 函数定义 { printf("x=%d",x); }
C语言 函数定义:
当我们定义一个函数时,我们提供了函数的实际主体。
函数定义提供函数的以下部分。
- 返回类型是值的数据类型(由函数返回)。
- 在花括号中,函数体是存在的。
- 一个函数可能有 0 个或者多个参数。当一个函数被调用时,你将一个值传递给参数。我们可以在 C 程序中使用任何类型的参数,例如 int、float、char 等。
函数定义指定了函数的名称、它期望接收的参数的类型和数量,以及它的返回类型。
函数定义还包括函数体及其局部变量的声明,以及确定函数功能的语句。
C语言函数定义 语法:
type functionName(int a, int b) { statement; }
函数声明/函数原型
函数声明(Function Declaration)也称为函数原型(Function Prototype)
C语言函数声明,告诉编译器一个函数的名字,它是返回类型和参数。
我们可以单独定义函数的实际主体。
函数声明的要点:
- C 中的函数声明总是以分号结尾。
- 在 C 语言中,默认情况下,函数的返回类型是 integer(int) 数据类型。
- 函数声明也称为函数原型。
- 在函数声明中,参数的名称不是强制性的,但我们必须定义它们的数据类型。因此以下声明也是有效的。
int getSum(int, int);
- 如果函数定义写在 main 函数之前,则不需要函数声明,而如果函数定义写在 main 函数之后,那么我们必须在 main 函数之前写函数声明。
C语言调用函数
一旦我们声明并定义了一个函数,我们就可以在程序的任何地方多次调用它。
该函数将根据我们的参数返回值。
一个函数可以被多次调用。
调用函数示例:
#include void display(int x ) // 函数声明,定义 { printf("x=%d",x); } int main() { int a=1; display(a); 调用函数 display(a); 可以多次调用函数,所以函数实现了复用性 return 0; }
带返回值的函数调用示例:
#include int display(int x ) // 函数声明和定义 { printf("x=%d",x); return(x); } int main() { int a=1; display(a); return 0; }
大多数情况下,我们看到每个 C语言 程序都至少有一个函数,例如 main() 。
我们可以在一个 C语言 程序中使用两个以上的 C 函数。
函数是一组一起执行任务的语句。
所有 C语言 程序都是使用函数编写的,以提高可重用性和可理解性。
C语言函数调用时,参数的传递方式
在调用函数时,我们可以通过以下两种方式传递参数:
- 按值调用
- 引用调用
按值调用
当实际参数的副本传递给相应的形式参数时,则将其定义为按值调用。
如果我们改变形式参数,它不会反映实际参数。
按值调用的示例:
#include <stdio.h> void add(int variable ) { printf("函数内变量做加法前的值 %d \n",variable); variable=variable+200; printf("函数内变量做加法后的值 %d \n", variable); } int main() { int num=100; printf("调用函数前变量的值 %d \n", num); add(num);// 传递 printf("调用函数后变量的值%d \n", num); return 0; }
在上面的例子中,int num 是实参(parameter),在函数 add() 中,int variable 是形参(argument)。
引用调用
在按引用调用中,实际参数的地址被传递给形式参数,因此对形式参数所做的任何更改也将反映在实际参数中。
引用调用示例:
#include void show(int *num) // 形式参数是指针形式的,表明它接收的是一个地址值。(变量在内存中的地址) { printf("函数内变量做加法前的值=%d \n",*num); (*num) +=300; printf("函数内变量做加法后的值=%d \n", *num); } int main() { int x=100; printf("函数调用前 x的值=%d \n", x); change(&x);// 在函数中传递实际参数(int x)的引用/地址 printf("函数调用后 x的值=%d \n", x); return 0; }
在引用调用中,我们在形参中传递的是 实参的地址
注意:在引用调用中,形参应该是指针类型的,因为地址类型的值只能保存指针类型的变量。