学到了函数,首先是函数的定义
函数的定义包括 函数头:返回类型 函数名(参数值)
{
函数体
}
其次是函数的调用,要调用一个函数,函数名后面必须要有“()”,“()”起到表示函数调用的重要作用,即使没有参数也是需要“()”,否则编译器不能调用你自己所编写的函数类型.
如果有参数,则需要给出正确的数量和顺序
这些值会按照顺序依次用来初始化函数中的参数
下面是一个 求和 的代码
int main() {
....
return 0;
} 这一段代码,就是我的理解就是 sum(1,10); 里的 1,10 相当于给 begin 和 end 赋值,然后函数体的语句将会执行,从而 得出结果
我觉得“函数体”相当于计算某一种类型数值的“通用公式”,就跟数学的函数类似
其次,函数知道每一次是哪里调用它,会返回到正确的地方。
从函数中返回值:return 停止函数的执行,并送回一个值,可直接“return” 或“return 表达式”
有了一个返回值后就 1.可以赋值给变量
2可以再传递给函数
3.甚至可以丢弃
PS.一个程序中可以有多个“return” ,但是不遵循“单一出口”原则。
没有返回值的函数: void 函数名 (参数表)
则不能使用带值的“return” ,也可以没有“return”,而且调用时不能做返回值的赋值。
如果函数有返回值,则必须使用带值的“return”
没有返回值的函数:
void 函数名 (参数表)
不能使用带值的return,可以没有return,调用时不能做返回值的赋值
函数先后关系:
void sum(){
函数体
}
int main(){
sum(1,10);
}
像这样把sum写在上面,是因为:C的编译器自上而下顺序分析你的代码。在看到sum(1,10); 的时候,它需要知道sum的样子,也就是sum()要几个参数,每个参数的类型如何,返回什么类型,才能知道调用的函数是否正确。
函数原型:
函数头,以分号“ ;”结尾,就构成了函数的原型。
函数原型的目的是告诉编译器长什么样:名称,参数(数量及类型),返回类型
然后 void sum( int a ,int b); 可以写成 void sum (int , int );
因为编译器不会检查参数的名称,会检查参数的类型,但是习惯于留名称,便于人们检查以及理解。
调用函数:
如果函数有参数,调用函数时必须传递给它数量,类型正确的值。
可以传递给函数的值是表达式的结果,这包括:
在C语言中在调用函数时,永远只能传值给函数。
传值:
每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系。
像上图中的 第一个 void swap(int a,int b); 第二个 void swap (int a ,int b );是两个变量空间
我们认为它们是函数和值得关系。
本地变量:
定义在函数内部的变量就是本地变量,参数也是本地变量
变量的生存期和作用域:
变量的生存期 :从开始到它消亡的这个期间
作用域:在(代码的)什么范围内可以访问这个变量(也就是这个变量的可以起作用的领域)
生存期和作用域受限于块内。
大括号内也称之为块
本地变量的规则:
一 本地变量定义在块内的
1 它可以是定义在函数的块内
2 也可以是语句内的块内,甚至可以拉一个大括号来定义变量
二 程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就解决了
三 块外面定义的变量在里面仍然有效
四 块里面定义了和外面同名的变量则掩盖了外面的。
五 不能在同一个块内定义内同名的变量
六 本地变量不会被默认初始化
七 参数在进入函数的时候被初始化了