函数

函数

定义,调用,声明

#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)
posted @ 2021-12-06 14:27  valder-  阅读(73)  评论(0)    收藏  举报