函数
函数
定义,调用,声明
#include<stdio.h>
//int con(int m,int n); 也可以直接在头文件中声明
int main(){
int con(int m,int n);//声明函数
//函数类型 函数名(类型1 形参1,类型2 形参2......)
int m,n,c;
scanf("%d,%d",&m,&n);
c=con(m,n); //调用函数 函数名(实参)
printf("%d\n",c);
}
//定义函数
//函数类型 函数名(类型1 形参1,类型2 形参2......){}
int con(int m,int n){
return m+n; //返回值
}
注:调用函数时最好不要使用++ --运算符,容易混淆
函数形参的传递方式
形参变量不是指针变量时,参数的传递是值传递
形参变量是指针变量时,参数的传递是地址传递
形参有两种具体形式:一个是指针形参,另一个是数组形参。并没有本质区别,仅仅是书写形式不同
递归
自己调用自己
要有一个终止调用的语句,不然函数一直调用自己,会陷入死循环,合理的递归调用是有限的,一般都有if()else()语句结束循环
long fac(int n){
long f;
if(n==0||n==1) f=1;
else f=fac(n-1)*n;
return(f);
}
函数指针和指向函数的指针变量
定义
#include<stdio.h>
int add(int x,int y);
int main(){
int a,b,c;
int (*p)(int,int);//定义指向函数的指针变量p
scanf("%d,%d",&a,&b);
p=add; //将函数指针即函数入口赋值给p
c=(*p)(a,b); //用指向函数的指针调用函数,与c=add(a,b)等价
printf("%d\n",c);
}
int add(int x,int y){
int z;
z=x+y;
return(z);
}
指向函数的指针变量可以调用不同的函数
#include<stdio.h>
int max(int x,int y){ //定义max函数
return x>y?x:y;
}
int min(int x,int y){ //定义min函数
return x<y?x:y;
}
int main(){
int a=123,b=456;
int (*f)(int,int); //定义指向函数的指针变量f
f=max; //指向max函数
printf("%d,%d\n",max(a,b),(*f)(a,b));//用两种方法调函数max
f=min; //指向min函数
printf("%d,%d\n",min(a,b),(*f)(a,b));//用两种方法调函数min
}
main函数的参数
一般不带参数,实际上呢,main可以带参数,并且C语言规定其函数只能有两个,习惯上写为argc和argv,形式如下
int main(int argc,char *argv[]){}
exit函数
int exit(int status);
可以强制结束程序运行。参数status为0时表示正常退出,不为0则为不正常推出
局部变量
定义在函数内部,只能在此函数中使用
全局变量
在与所有函数外定义的变量,不属于任何一个函数,可以在此程序中使用,定义与局部变量的定义一样
变量的存储类别
变量和函数都有两个属性:数据类型和存储类别
定义形式:存储类别 数据类型 变量名;
eg:auto int a,b; 定义自动整形变量a,b
有四种存储类型
auto:自动存储类型 最常用
static:静态存储类型
编译程序时将为变量建立永久存储单元,在函数调用结束后不释放内存单元,而保留原值,下次调用该函数时,以该变量上次调用结束时的值参加运算
register:寄存器存储类型
寄存器变量使用CPU中的寄存器,而不像普通变量那样使用内存。寄存器变量说明只适用于局部变量和函数的形参。通常只能是整形变量,字符型变量或指针变量。
适用于频繁使用的情况,可加快运行速度。
而且,现在编译系统已经能自动识别寄存器变量,并直接将他存放在对用变量中,所以在程序中不必特别使用此变量声明
extern:外部存储类型
外部函数和内部函数
内部函数:又称静态函数,在一个源文件中定义的函数,只能被本文件的函数调用,而不能被同一C程序的其他文件调用。定义时,在前面加上static
static int fun(int a,int b)
注:内部函数定义时,关键词static一定不能省略
外部函数:若在定义函数时没加关键词或加了extern,则表示该函数为外部函数
extern int func(int a,int b)

浙公网安备 33010602011771号