目录
什么是函数?
首先我们来说一说函数的作用,就是一块简单的代码接受零个或多个参数,做一件事情,并返回零个或一个值
voidsum(inta,intb) { inti; intsum=0; for(i=a:i<=b;i++) { sum+=i; } printf("%d到%d的和是%d\n",a,b,sum); }
现在我们就写出了一个简单的求和函数和数学中的y=f(x)很像
函数名 sum
返回类型 void
参数表 int a,int b
函数体 大括号里的所有东西
函数头 大括号前的东西
这样在代码段中我们就可以用sum()代替这段代码避免重复写相同的代码增加代码质量。
如何调用函数?
第二 现在我们已经创建了一个函数那我们应该怎么去使用调用这个函数呢?
首先呢你肯定要给这个函数起一个名字 命名形式为 函数名(参数值);括号起到了调用函数的重要作用 即使不用输入参数也要这个括号 有参数那么则需要给出正确的数量和顺序 这些值会用来初始化函数中的参数 好了 现在我们已经可以使用这个函数来计算了 现在我们需要得到这个值 这也就和上表中的返回类型有关了 我们说两种简单的 一:int double 这类的它是可以返回值的 二void 这种则相反 说明一下啊返回值通俗的来讲就是得到值并用来赋值计算什么的 return 是老熟人了 作用是停止函数的执行 并送回一个值 两种写法 return; return 表达式;表达式可以是变量那就代表返回的是这个变量的值 void是没有返回值的所以不用return 而上述代码中我们是不能吧sum的值交给其他东西 因为用的是void
下面我们用一段代码来直观的表示
intmax(inta,intb) { intret; if(a>b){ ret=a; }else{ ret=b; } returnret; } intmain(){ inta,b,c; a=5; b=6; c=max(10,12); c=max(a,b); c=max(c,23); c=max(max(c,a),5); printf("%d\n",max(a,b)); return0;}
函数的先后关系?
假如我们把一个函数命名为sum() 我们就要把sum()写在上面这和c语言的编译器有关它是自上而下的分析这个代码 再看见sum(1,10)的时候它需要知道这个函数的基本信息 这个信息就是函数的参数 数量 每个参数的类型 返回类型是什么 一定要把sum()写在下面的话 为了让编译器可以看懂我们就需要声明一下让编译器知道这个函数的大致情况在上面加一个函数原型(函数原型就是函数头加一个分号)不声明的话编译器就回去猜函数的类型这就会导致出错
类型匹配?
如果函数有参数那么调用函数时必须传递给他数量,类型正确的值
类型不匹配在c语言中问题不是很大 编译器是个好人会悄悄帮你把类型替换好,就是这个类型可能不是你所期望的
函数可以简化你的代码 也就是避免一些重复的代码 那么随着一次又一次的传递 变量可以传递交换吗?答案是不可以 调用函数时,永远只能传只给函数
函数的变量空间和生命周期
每个函数都有自己的变量空间,参数也位于这个独立的空间中,这个空间我们叫做块。和其他函数没有关系。
本地变量是定义在块内的它可以定义在函数的块内也可以定义在语句的块内甚至可以随便哪一个大括号来定义变量程序运行进入这个块前,其中的变量不存在,离开这个块,其中的变量就消失了块外面定义的变量在里面仍然有效块里面定义的变量和外面同名则掩盖了外面的不能在同一个块里定义同一个变量本地变量不会被默认初始化参数在进入的时候就被初始化了