【C语言】函数

来源:互联网 发布:咕咕收音机专业版 mac 编辑:程序博客网 时间:2024/06/05 19:13

1、C语言里可以采用分组的方式管理语句每个语句分组叫做一个函数

2、多函数程序执行的时候时间分配情况必须遵守以下规则
1.整个程序的执行时间被划分成几段,每段时间都被分配给一个函数使用
2.不同时间段不能互相重叠并且所有时间段必须连续
3.如果函数A在工作的时候把一段时间分配给函数B使用则函数B结束所有工作之后必须把后面的时间还给函数A

3、如果函数A在工作的时候把时间分配给函数B使用则它们之间存在函数调用关系

4、在函数调用关系中函数A叫做调用函数,函数B叫做被调用函数

5、函数调用关系只在被调用函数工作的时间范围内才存在

6、函数调用语句可以产生函数调用关系,可以把一个函数的执行时间分配给别的函数

7、不可以跨函数使用变量

8、不同函数里的变量可以重名

9、如果函数多次运行则它里面的变量每次对应的存储区都可能不同,即每次取出的值不同

10、声明变量的时候可以使用volatile关键字,这种变量对应的存储区可以被多个程序同时使用

11、函数调用过程中通常伴随着两个函数之间的数据传递

12、函数调用过程中数据传递存在两个完全相反的方向,可以从调用函数传递给被调用函数也可以从被调用函数传递给调用函数

13、任何方向的数据传递都要使用被调用函数提供的存储区

14、只能从被调用函数向调用函数传递一个数据这个数据叫做被调用函数的返回值

15、只能在被调用函数结束的时候传递返回值

16、传递返回值的时候需要把它记录到被调用函数提供的一个存储区里,这个存储区的类型名称应该写在函数名称前

17、被调用函数里使用return关键字可以把返回值记录到这个存储区里

18、调用函数把函数调用语句当作数字使用就可以得到函数的返回值

19、如果被调用函数没有使用return关键字向存储区里放返回值则存储区里的内容是随机的

20、调用函数只有一次获得返回值的机会,得到返回值以后或者立刻使用或者另外存储到其它存储区

21、如果函数没有返回值就应该在函数名称前写void

22、如果函数名称前什么都不写在C89规范里表示函数提供一个整数类型存储区用来存放返回值,在C99规范里不允许这样

23、被调用函数不可以用数组存放返回值

24、函数调用过程中可以从调用函数向被调用函数传递多个数据,这些数据的类型可以不同

25、被调用函数需要为每个传递过来的数据提供一个对应的存储区

26、可以使用被调用函数提供的一组变量表示这些存储区,这些变量必须声明在函数名称后面的小括号里

27、这些变量叫做函数的形式参数,小括号里的所有内容叫做函数的形式参数列表

28、每个形式参数的类型名称都不可以省略

29、相邻形式参数声明之间用逗号分开

30、被调用函数里可以象使用普通变量一样使用形式参数

31、函数调用语句的小括号里需要为每个形式参数提供一个对应的数字,相邻数字之间用逗号分隔这些数字叫做实际参数

32、函数调用的时候计算机把每个实际参数存放在对应的形式参数里,被调用函数里可以通过形式参数得到实际参数的数值

33、只要能当作数字使用的内容都可以作为实际参数使用

34、如果函数没有形式参数就应该在小括号里写void

35、编写函数时如果小括号里什么都没写表示函数可以提供任意多个形式参数,这些形式参数的类型可以不同

/* * 函数演示 * */#include <stdio.h>/* * 定义新函数 * */void func(void) {    printf("1\n");}/* * 演示不能夸函数使用变量 * 在主函数里再输出num会报错 * */void func_2(void) {    int num = 0;    printf("num是:%d\n", num);}/* * 函数的多次运行 * */void func_3() {    int num;    printf("num是:%d\n", num);// 程序有执行顺序,这里的最后值是一个随机数;    num = 10;}void func_4() {    int num = 1000; //在执行func_3后虽然num曾赋值了10,但是不同函数调用的可能不是同一个存储区,所以还是随机数    func_3();}/* * 函数的返回值练习 * */int read(void) {    int num = 0;    printf("请输入一个数字:\n");    scanf("%d", &num);    return num;       //将返回值存放在被调函数的存储区内}/* * 从键盘得到两个数,计算和,将结果返回 * */int sum(void) {    int a = 0, b = 0, sum = 0;    printf("请输入两个整数:\n");    scanf("%d%d", &a,&b);    sum = a + b;    return sum; //注意写上返回,虽然有时是正确的}/* * 参数演示 * */void add(int num, int num1) {  // 没有形式参数的话就写VOID,如果没有写,表示函数可以提供任意多个形式参数,这写参数可以任意不同    int sum = 0;    sum = num + num1;    printf("求和结果是:%d\n", sum);}int add_2(int num, int num2) {    int sum = 0;    sum = num +num2;    return sum;}/* * * */int exercise(int jiao, int tou) {    int t = 0, j = 0;    for(t = 0; t <= tou ; t++) {        for(j = 0; j <= tou; j++) {            if(4 * t + 2 * j == jiao) {               printf("测试:t:%d j:%d\n", t, j);                return t;            }        }    }}int main() {//    int num = 10;    //不同函数内的变量是可以重名的的//    func();//    func_1();//    printf("num是:%d", num);//    func_3();//    func_4();//    int num = read ();//将被调函数当数字来用//    printf("num是:%d\n", num);//    printf("输入的两个整数和为:%d\n", sum());//    add(4,5);//    int num = 0, num1 = 0;//    printf("请输入两个整数:\n");//    scanf("%d%d", &num, &num1);//    printf("两个整数的和为:%d\n", add_2(num, num1));    printf("请输入有多少脚和多少个头:\n");    int j = 0, t = 0, k = 0, z = 0;    scanf("%d%d", &j, &t);    printf("有兔子%d只\n", exercise(j,t));    return 0;}