函数是一段可以执行特定任务的代码块。它可以接受输入参数并返回一个值。函数使得代码可以被模块化,重复使用,并提高代码的可读性和可维护性
像 printf , scanf 的基础功能,它们不是业务性的代码。我们在开发的过程中每个程序员都可能用的到, 为了支持可移植性和提高程序的效率,所以C 语言的基础库中提供了一系列类似的库函数,方便程序员 进行软件开发。
库函数是由编译器或操作系统提供的函数,用于执行常见的任务,如输入输出、字符串处理、数学计算等。库函数可以直接使用,不需要额外的编写和编译
下面是一个使用库函数的示例代码,计算并打印正弦值:
#include <stdio.h>
#include <math.h>
int main() {
double angle = 30;
double sinValue = sin(angle);
printf("Sin value of %lf degrees: %lf\n", angle, sinValue);
return 0;
}
其中各种库函数及其对应的头文件可以去cplusplus.com 查看,接下来我给出一个实例:
同时也能帮助到各位理解上面的代码,c语言中库函数亦不少,本文便不进行大量阐述。日后我会再写文章来详细讲解。
自定义函数: 自定义函数是由程序员根据需求自行编写的函数。它们可以完成特定的任务,并可以通过函数名调用执行。自定义函数在代码中经常被使用,可以提高代码的模块化和可重用性。
下面是一个自定义函数的示例代码,用于计算两个整数的和:
#include <stdio.h>
// 自定义函数,用于计算两个整数的和
int add(int a, int b) {
return a + b;
}
int main() {
int x = 5;
int y = 10;
int sum = add(x, y);
printf("Sum: %d\n", sum);
return 0;
}
函数的实际参数是在函数调用时传递给函数的值。实际参数可以是常量、变量、表达式或其他函数的返回值。实际参数的值被传递给函数的形式参数,从而在函数内部使用。实际参数的值可以影响函数的行为和结果。
形式参数是在函数定义中声明的变量,用于接收函数调用时传递的实际参数的值。形式参数在函数定义中起到占位符的作用,它们的值在函数调用时由实际参数提供。形式参数只在函数内部可见,其作用域仅限于函数内部。
下面用代码事例来进一步阐述:
#include <stdio.h>
// 函数定义,使用形式参数
void printSum(int a, int b) {
int sum = a + b;
printf("Sum: %d\n", sum);
}
int main() {
int x = 5;
int y = 10;
// 函数调用,使用实际参数
printSum(x, y);
return 0;
}
在上述示例代码中,我们定义了一个名为printSum()
的函数,它接受两个形式参数a
和b
。在main()
函数中,我们声明了两个整数变量x
和y
,并将它们作为实际参数传递给printSum()
函数。在printSum()
函数内部,形式参数a
和b
接收到相应的值,并计算它们的和。最后,在函数中打印出结果
需要注意的是:形参实例化之后其实相当于实参的一份临时拷贝,想要改变参数的值,单单传值操作是不行的哦,我们要进行传址操作(后面讲)
传值调用是指在函数调用时,将实际参数的值复制给形式参数,二者的地址是不同的,即函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参
接下来用一段代码来详细说明:
void changeValue(int *ptr) {
*ptr = 10;
printf("Inside function: %d\n", *ptr);
}
int main() {
int x = 5;
printf("Before function call: %d\n", x);
changeValue(&x);
printf("After function call: %d\n", x);
return 0;
}
此为传地址调用:可以清楚地发现,x的值被改变了
-------------------------------------------------------------------------------------------------------------------------------
传值
void changeValue(int ptr) {
ptr = 10;
printf("Inside function: %d\n", ptr);
}
int main() {
int x = 5;
printf("Before function call: %d\n", x);
changeValue(x);
printf("After function call: %d\n", x);
return 0;
}
而传值调用发现:根本改变不了,再结合之前的说明相信各位更加能理解清楚了
函数的嵌套调用是指在一个函数内部调用另一个函数。这种调用方式可以实现函数的层层嵌套,每个函数负责不同的功能,使代码结构更加清晰和模块化。通过函数的嵌套调用,可以将复杂的问题分解成更小的子问题,并通过调用不同的函数来解决这些子问题
int multiply(int a, int b) {
return a * b;
}
int add(int a, int b) {
return a + b;
}
int main() {
int x = 5;
int y = 3;
int result = multiply(add(x, y), y);
printf("Result: %d\n", result);
return 0;
}
定义了两个函数
multiply()
和add()
,分别用于实现乘法和加法运算。在main()
函数中,我们声明了两个整数变量x
和y
,并将它们作为实际参数传递给add()
函数。add()
函数返回x + y
的结果,然后将这个结果作为实际参数传递给multiply()
函数。最后,multiply()
函数返回result * y
的结果,这个结果被赋值给变量result
把一个函数的返回值作为另外一个函数的参数
printf("%d", printf("%d", printf("%d", 43)));
第一个printf打印32,返回值是2
函数的声明是指在使用函数之前事先告诉编译器函数的名称、返回类型和参数列表 。函数的声明一般出现在函数的使用之前。要满足先声明后使用
函数的定义是指函数的具体实现,交待函数的功能实现
// 声明函数
int add(int a, int b);
// 定义函数
int add(int a, int b) {
return a + b;
}
int main() {
int x = 5;
int y = 3;
int result = add(x, y);
printf("Result: %d\n", result);
return 0;
}
声明了一个函数
add()
,告诉编译器函数的名称、返回类型和参数列表。然后,在源文件中定义了这个函数,提供了具体的实现代码。在main()
函数中,我们调用了add()
函数,传递了两个实际参数x
和y
,并将返回值赋值给变量result
。最终,在main()
函数中打印出result
的值
函数的声明和定义可以分开进行,也可以合并在一起。如果函数的声明和定义在同一个源文件中,函数处于前方,可以省略函数的声明,直接定义函数即可。如果函数的声明和定义分开在不同的源文件中,需要在使用函数之前先进行函数的声明 。
这次先到这里的,下次会进行函数递归和数组的详细讲解的。谢谢大家!!!