一.例子
#include<stdio.h>
void sum(int begin,int end)
{
int i;
int sum = 0;
for (i = begin; i <= end; i++)
{
sum+= i;
}
printf("%d到%d的和是%d\n",begin ,end,sum);
}
int main()
{
sum(1, 10);
sum(20, 30);
sum(30, 45);
}
void sum就是我们自己定义的一个加法函数;
二.什么是函数?
- 函数是一块代码,接受零个或多个参数,做一件事,并返回零个或一个值;
- 可以先想象成数学中的函数;
- y=f(x);
tips:void的返回类型是不返回任何值;
1.调用函数
- 函数名(参数值);
- ()括号起到了表示函数的重要作用
-即使没有参数也需要() - 如果没有参数,则需要给出正确数量和顺序
- 这些值会被按照顺序依次用来初始化函数中的参数
- 函数知道每一次是哪里调用它,会返回到正确的地方
2.从函数中返回
素数求和
- int isPrime说明要返回一个int类型的结果,安排return语句返回这个结果
——————
- 返回的变量ret可以作为结果赋给下个变量
- 可以再传递给函数
- 甚至可以丢弃
3.没有返回值的函数
- void函数名(参数表)
- 不能使用带值的return
- 可以没有return
- 调用的时候不能做返回值的赋值
- 如果函数有返回值,则必须使用带值的return
三.函数的参数
1.函数声明
实例
#include<stdio.h>
void sum(int begin, int end); //函数声明
int main()
{
sum(1, 10);
sum(20, 30);
sum(30, 45);
}
void sum(int begin, int end) //函数定义 实际的函数头
{
int i;
int sum = 0;
for (i = begin; i <= end; i++)
{
sum += i;
}
printf("%d到%d的和是%d\n", begin, end, sum);
}
-函数头,以分号“;”结尾,就构成了函数的原型
-函数原型的目的是告诉编译器这个函数张什么样
-名称
-参数(数量及类型)
-返回类型
2.类型不匹配
#include<stdio.h>
void cheer(int i)
{
printf("cheer %d\n", i);
}
int main()
{
cheer(2.4);
return 0;
}
什么int 整数型和2.4冲突 但c编译器并没有报错 但在后面的语言 如java c++比c严格,会无法通过
3.传值
- 每个函数有自己的变量空间,参数也位于这个独立空间中,和其他函数没有关系
参数与值的关系
四.函数的变量
1.本地变量(局部变量、生存变量)
- 函数的每次运行,就产生了一个独立的变量空间,在这个空间中的变量,是函数的这次运行所独有的,称作本地变量
- 定义在函数内部的变量就是本地变量
- 参数也是本地变量
2.变量的生存期和作用域
- 生存期:什么时候这个变量开始出现了,到什么时候它消亡了
- 作用域:在(代码的)什么范围内可以访问这个变量(这个变量可以起作用)
- 对于本地变量,这两个问题的答案是统一的:大括号内——块
#include<stdio.h>
void swap(int x,int y);
int main()
{
int a=5;
int b=6;
swap(a,b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void swap(int x,int y)
{
int swap;
int t=x;
x=y;
y=t;
}
main里头的a b与swap里头的a b无关,swap里的量是属于他自己的ab 当swap运行结束,他的函数空间的消亡了
3.本地变量的规则
- 本地变量是定义在块内的
-它可以是定义在函数的块内
-也可以定义在语句的块内
-甚至可以随便拉一对大括号来定义变量
-程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了
-块外面定义的变量在里面仍然有效
-块里面定义了和外面同名的变量则掩盖了外面的
-不能在一个块内定义同名的变量
-本地变量不会被默认初始化
-参数在进入函数的时候被初始化了
4.没有参数时
- void f(void) or void f( );
-在传统c中,void f( );它表示f函数的参数表未知,并不表示没有参数
5.逗号运算符?
- 调用函数时的逗号和逗号运算符怎么区分》
- 调用函数时的圆括号里的逗号是标点符号,不是运算符
- f(a,b) //传了一个参数
- f((a,b)) //传了2个参数
6.关于main
- int main()也是个函数
- 要不要写成 int main(void)?
- return的0有人看吗?
-Windows:if error level 1…
五.小测验
函数原型必须要有分号
函数头,以分号“;”结尾,就构成了函数的原型
调用的时候不能做返回值的赋值
B.不写的话计算机会猜测里面有一个int型参数