C-函数

C-函数

函数概念

对一段代码的封装,接收0或多个参数,执行封装的代码块,返回0或1个值

函数定义

调用函数

函数名(参数列表)

说明

1)有参数时,需要给出正确的参数数量和顺序,这些值会按顺序赋值给函数内的参数

2)没有参数时,参数列表为空

栗子

 1 #include <stdio.h>
 2 
 3 //calculate the sum between begin and end
 4 int sum(int begin, int end){
 5     int i = 0;
 6     int sum = 0;
 7     for (i = begin; i <= end; i++) {
 8         sum += i;
 9     }
10 
11     return sum;
12 }
13 
14 int main(void)
15 {
16     int begin = 5;
17     int end = 10;
18     int sums = sum(begin, end);
19     printf("%d
", sums);
20     return 0;
21 }

函数返回

1)函数执行完成后,会返回到调用到它的地方

2)return关键字用做从函数中返回值,return停止函数的运行,返回一个值,并回到调用它的位置,一个函数中可以出现多个return语句

3)从函数返回的值可以赋值给变量,传递给函数,丢弃 

4)没有返回值的函数,返回类型为void,不能使用带值的return或函数中没有return,调用时不能做返回值的赋值;

   有返回值的函数,必须使用带值的return

函数的先后关系

C语言的编译器是自上而下分析代码的

      V

当在main函数中调用其他函数时,它需要知道这个函数的样子(函数名称,参数数量和类型,返回类型),

这样它才能知道对这个函数的调用是否正确

      V

如果你把这个函数放在main函数的下面,编译器就会报错

      V

我们也可以通过函数原型让编译器知道我们函数的样子

函数头,以分号结尾,构成函数的原型

栗子

 1 #include <stdio.h>
 2 
 3 int sum(int begin, int end); //函数原型(声明)
 4 
 5 int main(void)
 6 {
 7     int begin = 5;
 8     int end = 10;
 9     int sums = sum(begin, end);
10     printf("%d
", sums);
11     return 0;
12 }
13 
14 //calculate the sum between begin and end
15 int sum(int begin, int end){ //定义
16     int i = 0;
17     int sum = 0;
18     for (i = begin; i <= end; i++) {
19         sum += i;
20     }
21 
22     return sum;
23 }

参数传递

C语言函数是按值传递的

每个函数都有自己独立的变量空间,参数也位于这个独立的变量空间,和其他的函数没有关系

下面我们通过一个栗子来说明

 1 #include <stdio.h>
 2 
 3 void swap(int x, int y){
 4     int t = x;
 5     x = y;
 6     y = t;
 7     printf("x=%d, y=%d
", x, y); //x=2, y=1
 8 }
 9 
10 int main(void){
11     int a = 1;
12     int b = 2;
13     swap(a, b);
14     printf("a=%d, b=%d
", a, b); //a=1, b=2
15 }

本地变量

函数每次运行时,都会产生一个独立的变量空间,在变量空间内定义的变量和函数的参数都称为本地变量

变量的生存周期和作用域

生存周期,从变量开始出现到变量消亡(大括号内)

作用域,可以访问这个变量的范围(大括号内)

本地变量的规则

1)本地变量是定义在块内的

  它可以是定义在函数的块内

  也可以定义在语句的块内

  甚⾄可以随便拉⼀对⼤括号来定义变量

2)程序运⾏进⼊这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了

3)块外⾯定义的变量在⾥⾯仍然有效

4)块⾥⾯定义了和外⾯同名的变量则掩盖了外⾯的

5)不能在⼀个块内定义同名的变量

6)本地变量不会被默认初始化

参数在进⼊函数的时候被初始化了

注意

1)函数fun()表明函数的参数未知,当在main函数中调用fun函数时,编译器会根据

  传入的参数来猜测函数的数量及类型,这可能会产生你不希望看到的结果;

  函数fun(void)表明函数不接收任何参数;

2)C语言不允许在函数内定义另一个函数,即不允许函数嵌套定义

原文地址:https://www.cnblogs.com/marton/p/12312361.html