分类:
一、从定义角度分类(即函数是谁实现的)
1.库函数(c语言实现的)
2.自定义函数(程序员自己实现的函数)
3.系统调用(操作系统实现的函数)
二、从参数角度分类
1.有参函数:函数有形参,可以是一个,或者多个,参数的类型随便,完全取决于函数的功能。
2.无参函数:函数没有参数,在形参列表的位置写一个 viod 或什么都不写。
三、从返回值角度分类
1.带返回值的函数:在定义函数的时候,必须带着返回值类型,在函数体里,必须有 return ,如果没有返回值类型,默认返回整型。
2.没有返回值的函数:在定义函数的时候,函数名字前面加 void ,在函数里不需要 return。如果想结束函数,返回到被调用的地方,return ;什么都不返回就可以了。
调用:
函数调用的例子:
void sum(int begin, int end) -------->叫做函数头/*void是返回类型(空的,没有返回值) sum是函数名 int begin, int end 是参数表*/
{ -------->因为是函数的内容大括号必须有!!!
int i;
int sum = 0;
for( i=begin; i<=end; i++){ ------->叫做函数体
sum += i;
}
printf("%d~%d的和是%d\n", begin, end, sum);
}
调用函数:如果函数有参数,调用时必须传递给它数量、类型正确的值。同时传递给函数的值也可以是表达式的结果,这包括:字面量、变量、函数的返回值、表达式计算的结果。
例子:求某数字前的所有素数之和.
普通素数求和 | 函数调用求素数和 |
#include <stdio.h> int main() { int m, n, i; int sum = 0; int cnt = 0; scanf("%d %d", &m, &n); if( m==1 ){ m=2; } for( i=m; i<=n; i++ ){ int isPrime = 1; int k; for(k=2; k<i-1; k++){ if( i%k == 0){ isPrime = 0; break; } } if( isPrime ){ sum += i; cnt++; } } printf("数字%d前有%d个素数和为%d。\n", n, cnt, sum); return 0; } | #include <stdio.h> |
原理:
C语言函数的原理是通过函数的定义和调用来实现代码的模块化和复用。函数是一段独立的代码块,可以接受输入参数,并且可以返回一个值。
在C语言中,函数由函数头和函数体组成。函数头包括函数的返回类型、函数名和参数列表;函数体则包含具体的代码实现。函数的定义告诉编译器如何执行特定的任务,而函数的调用则将控制权转移到函数体中执行具体的代码。
当程序调用一个函数时,它会传递参数给函数,并且等待函数执行完成并返回结果。函数可以根据参数的类型和个数来接收和处理数据。在函数体内部,我们可以使用参数进行计算、操作变量,并在需要时返回一个结果。
函数的原理是通过栈来实现的。当调用一个函数时,会将当前执行状态保存到栈中,包括函数的返回地址、局部变量等信息。然后,程序跳转到被调用函数的入口,开始执行函数体中的代码。当函数执行完毕后,会从栈中恢复之前保存的状态,继续执行调用该函数之后的代码。