1.c中函数是可以独立运行的最小的程序单元
2.一个c程序可由一个主函数和若干个其他函数构成。由主函数调用其他函数,其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用多次。
3.定义函数的方法
定义无参函数
类型名 函数名 ()
{
函数体
}
或
类型名 函数名(void)
{
函数体
}
定义有参函数
类型名 函数名 (形式参数表列)
{
函数体
}
定义空函数
类型名 函数名 ()
{}
4.函数的调用
形式:
函数名(实参表列)
eg:
int max(int x,int y) //形参 //定义max函数,有两个参数
{
int z; //定义临时变量z
z=x>y?x:y;
return z;
}
#include <stdio.h>
void main()
{
int max(intx,int y); //声明max函数
int a,b,c;
printf(“please enter two integer number:”);
scanf("%d,%d",&a,&b);
c=max(a,b);//实参 //调用max函数
printf(“max is %d\n”,c);
}
函数先定义后使用时无需声明,先使用后定义时需要对函数加以声明。
实参-------->形参:实参的值传递给形参,main函数中的值传递给max函数,然后max函数运行完,return给c。
实参向形参的数据传递是“值传递”,单项传递,只能由实参传给形参,而不能由形参传给实参。实参和形参在内存中占有的存储单元不同,实参无法得到形参的值。
参数传递时,若实参与形参类型不同时,实参类型强制向形参类型转换
若return返回值类型与函数不一致时,return的返回值类型强制向函数转换
5.return语句的作用:
将表达式的值返回到函数的调用处
中止函数运行
一个函数体中允许有多余return语句,但一次调用只能有一个return被执行。
6.函数的嵌套与递归
一个函数内不能再定义另一个函数,但可以嵌套调用函数。
递归语句:
调用本身
每调用一次离距离结束递归就近了一步(暗含条件的修改)
#include <stdio.h>
void main()
{
int age(int n); //声明age函数
printf(“NO.5,age:%d\n”,age(5));
}
int age (int n)
{
int c;
if (n==1) //如果=1,年龄等于10
{
c=10;
}
else
{
c=age(n-1)+2;
//年龄是前一个学生年龄加2,先从第五个学生开始求,每一个学生的年龄都是前一个学生年龄加二,都有一个未知数(前一个学生的年龄),当递归到第二个学生年龄时,等于第一个学生的年龄加二,在执行if-else语句时,得出第一个学生的年龄是10,然后反推,从而得出每个学生的年龄
//在递推时根据n-1,每一次都n–
}
return c;
}
7.数组作为函数参数
数组做函数参数时为地址传递
数组元素可以用作函数实参,但不能用作形参。因为形参是在函数被调用时临时分配存储单元的,不可能为一个数组元素单独分配存储单元(数组是一个整体,在内存中占连续的一段存储单元)
一维数组做函数形参时,实参只能同类型的一维数组名
#include <stdio.h>
void main()
{
float average(float array[10]);
float score[10],aver;
int i;
printf(“input 10 scores:\n”);
for(i=0;i<10;i++)
{
scanf("%f",&score[i]);
}
printf("\n");
aver=average(score);
printf(“average score is %5.2f\n”,aver);
}
float average(float array[10])
{
int i;
float aver,sum =array[0];
for (i=1;i<10;i++)
{
sum=sum+array[i];
}
aver=sum/10;
return aver;
}
二维数组名做实参时,形参必须是同类型二维数组,且二者列数必须相同
8.局部变量和全局变量
不同作用域内允许有同名变量,它们各自存储空间不同,使用时互不相干
当一个作用大的变量的作用域内包含一个另一个作用域小的同名变量时,在作用域小的范围内,作用域大的同名变量被屏蔽
局部变量
在函数内定义的变量是
外部变量
在函数之外定义的变量
全局变量可以被本文件中其他函数所共用,范围:从定义变量的位置开始到本源文件结束
全局变量一定是外部变量,外部变量不一定是全局变量
9.变量的存储方式
程序开始时分配空间,结束时释放的为永久变量
自动变量(auto变量)
在调用该函数时,系统会给这些变量分配存储空间,在函数调用结束时就自动释放这些存储空间
静态变量(static局部变量)
函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次再调用该函数时,该函数已有值就是上次结束的值
寄存器变量(register变量)
可提高运算速度