函数:函数是一块代码,接受零个或者多个参数,做一件事情,最后返回0或者一个值。函数最终可以不返回任意一个值;还可以在定义函数中直接用printf输出出来,这样在主函数调用函数时就会直接按照定义函数里的样子输出出来。
函数定义:其中
上述代码称为函数头,用于定义函数。而在函数头后面用大括号括起来的是函数体,即调用函数时将要运行的部分。
void sum(int begin,int end)
{
int i;
int sum=0;
for(i=begin;i<=end;i++){
sum=sum+i;
}
printf("%d",sum);
}
sum是函数名,void是返回类型。
其中void意思是空,在这里代表这个sum函数没有返回值,为了与其相匹配,则函数最后也不能加return n,但可以用printf输出。sum后面的小括号称为元括号,元括号标志着sum是个函数,若没有元括号,那么sum就有可能只是个变量。元括号内的是参数表,参数表中列出来的是一个个的参数,参数之间用逗号分隔,参数表中的参数都是由一个类型与一个名字组合起来,如int begin,int end。
调用函数:
当调用函数时,要写出函数名与参数值,即 函数名(参数值)的形式元括号内要给出需要传递给函数进行运算的值,定义函数中的参数表有多少个参数,那么在调用函数时就需要按照格式写出多少个参数。如上面sum(int begin,int end),则后面调用函数时,就需要用sum(5,6)。所传递的参数也要符合定义函数时的参数类型,如int就得传递整型数值。当有参数时,就需要给出正确的数量和顺序,这些值会被按照顺序依次用来初始化函数中的参数。
即使没有参数,也需要加上元括号。
从函数中返回:
1.从函数中返回值用的是return。return停止函数的执行,并且送回一个值。格式为:return 表达式。return函数返回值的类型需要和函数头中的返回类型要相匹配。特殊的是void类型,void类型代表没有返回值,不能使用带值的return,其中可以没有return。
2.任何返回函数中都不可以做返回值的赋值。
3.如果函数有返回值,就必须使用带值的return。
函数原型:
1.函数的定义放在主函数的前后都可以。当定义函数放在主函数的后面时,就需要在主函数的前面加上一句函数原型,告诉主函数存在这么一个函数,使得主函数在调用函数时就能够使用定义函数。
2.函数原型格式:函数头;(函数原型的格式就是函数头加上分号)
3.函数原型中的返回类型以及参数表中的参数类型需要和后文定义函数中的一致(就算主函数前加了函数原型,但定义函数时也需要写函数头,不能不写)
下面是函数原型的例子:
#includevoid sum(int begin,int end); int main() { int a,b; a=5; b=6; //scanf("%d %d",&a,&b); sum(a,b);//调用函数中是传值,传值是仅仅把a和b的值传递到下面的函数中去。 return 0; } void sum(int begin,int end) { int i; int sum=0; for(i=begin;i<=end;i++){ sum=sum+i; } printf("%d",sum); }
参数传递:
1.在调用函数时,要注意传递的是变量的值,而不是变量本身,总的来说称为“传值”。
2.定义在函数里头的参数,和主函数中定义的变量是完全不同的,即使他们的名称一样,但二者毫无关联,是独立存在的,在调用函数时,只会将主函数中变量的值传递给函数中的参数进行运算,最后在通过return将结果返回。
例:
此处主函数的a,b与定义函数中的a,b是不同的。因此代表,在主函数中,只要按照:函数名(参数)的格式调用函数,那么电脑就能识别出来,将值按照顺序传递到函数中去。
本地变量:
1.本地变量指的是定义在函数或一些循环语句内部的的变量,也称为局部变量,是函数这一次运行所独立拥有的。
2.变量具有生存期和作用域,生存期指的是什么时候这个变量出现了,到什么时候它消亡了;作用域指的是在代码的什么范围内可以访问这个变量(即这个变量在什么范围内可以起作用)。而对于本地变量来说,他的生存期与作用域是统一的,都是在大括号内。
3.本地变量的规则:(1).本地变量是定义在块内(大括号)的,可以是定义在函数的块内,也可 以是语句的块内,如if语句内。甚至可以随便拉一堆大括号来定义本地变量。
(2).程序在运行进入这个块之前,其中的变量是不存在的,离开这个块后, 其中的变量也消失了,这代表着定义在块内的变量就只能在块内使用。
(3).块外面定义的变量在块内仍然生效。
(4).若是块里面定义了和外面同名的变量则掩盖了外面的变量。
(5).不能在一个块内定义同名的变量。



