C语言基础知识之函数
2017-06-04 22:20
288 查看
函数分类:
1.库函数;用户定义函数
2.有返回值函数;无返回值函数
3.无参函数;有参函数
C程序的执行总是从main函数开始,完成对其它函数的调用再返回到main函数中,最后由main函数结束整个程序。其他函数定义的位置任意。
函数定义的一般格式:
存储类型 数据类型 函数名(形参定义表)
{
数据定义和生命语句序列;
可执行语句序列;
}
例:求两数之间的最大值
/*函数定义
int max(int a,int b) /*int 是函数类型,无返回值时类型是void,如果省略类型名,一律按整型处理。
{
if(a>b)
return a;
else
return b;
}
void main()
{
int max(int a,int b); /*函数说明,有些情况下可省略
int x,y,z;
printf("Please input two numbers:\n");
scanf("%d%d",&x,&y);
z=max(x,y); /*函数调用
printf("maxmum=%d",z);
}
省去主调函数对被调函数的函数说明的三种情况:
1.被调函数的返回值值整型或者字符型时
2.被调函数的函数定义出现在主调函数之前时,在主调函数可以直接调用
3.在所有函数定义之前,子啊函数外预先说明了各个函数的类型,则在以后的主调函数中,可不再说明。
例:
char str(int a);
main()
{
…
4000
}
char str(int a)
{
…
}
4.对库函数的调用不需要在做说明,但必须把该函数的头文件用include命令包含在源文件前部。
return语句的格式如下:
return 表达式;
或 return(表达式);
或 [return;]
无返回值函数的末尾可以有有一个不带表达式的return语句。
当函数的返回值类型与函数定义时的类型不一样的时候,返回值自动转换成函数定义的类型。
在函数形参表中,允许不给出性参数组的长度,或者用一个变量来表示数组元素的个数
例: void nzp(int a[])
或 void nzp(int a[], int n) /*n动态的该处数组长度
当形参为数组时,实参与形参实际上是同一数组,他们的值同时改变。数组名就是首地址,因此在数组名作函数参数时所进行的传送只是地址的传送,也就是说把是参数组的首地址赋予型参数组名。
内部函数与外部函数
内部函数:在一个源文件中定义的函数只能被本院文件中的函数调用,而不能在同一程序中其它源文件的函数调用。
定义:
static 数据类型 函数名(形参定义表)
{
函数体
}
外部函数:在一个源文件中的函数也可被其他源文件中的函数所调用。
定义:extern可省略,一般的函数都是外部函数
[extern] 数据类型 函数名(形参定义表)
{
函数体
}
在调用外部函数时需要声明。
函数的递归调用:
例:用递归法计算n!
long ff(int n)
{
long f;
if(n<0)
printf("n<0,input error");
else if(n==0|| n==1)
f=1;
else
f=ff(n-1)*n;
return(f);
}
main()
{
int n;
long y;
printf("input an inteager number:\n");
scanf("%d",&n);
y=ff(n);
printf("%d!=%d",n,f);
}
变量:
1.局部变量的定义和说明可以不加区别,外部变量需要。(全局变量与外部变量是同一种,全局变是从它的作用域提出的,外部变量是从它的存储方式提出的)
外部变量只能定义一次:例 [extern]类型说明符 变量名1,2,…
[extern] int a, b; /*extern可省略
2.在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。
3.变量的存储方式可分为两种,静态与动态。静态存储变量通常是在变量定义时就分定存储单元并一直保持不定,直至整个程序结束。动态存储变量是在程序执行过程中,使用它时才分配存储单元。静态局部变量在函数内定义,但生存期是整个程序,虽然离开了定义它的程序就不能使用,但是如果再次调用定义它的函数的时候,它又可继续使用并保留了上一次调用它的时候留下的值。静态全局变量则只能在同一源文件中才能使用,其他文件不能调用。
变量的存储类型:
动态存储方式: auto(自动变量,使用最广,可省略,不可作初始化赋值),register(寄存器变量,其他变量都存放在存储器中,这种变量存放在CPU的寄存器中,使用时不需要访问内存,直接从寄存器中读写,可提高效率)
静态存储方式:extern(外部变量),static(静态变量)
1.库函数;用户定义函数
2.有返回值函数;无返回值函数
3.无参函数;有参函数
C程序的执行总是从main函数开始,完成对其它函数的调用再返回到main函数中,最后由main函数结束整个程序。其他函数定义的位置任意。
函数定义的一般格式:
存储类型 数据类型 函数名(形参定义表)
{
数据定义和生命语句序列;
可执行语句序列;
}
例:求两数之间的最大值
/*函数定义
int max(int a,int b) /*int 是函数类型,无返回值时类型是void,如果省略类型名,一律按整型处理。
{
if(a>b)
return a;
else
return b;
}
void main()
{
int max(int a,int b); /*函数说明,有些情况下可省略
int x,y,z;
printf("Please input two numbers:\n");
scanf("%d%d",&x,&y);
z=max(x,y); /*函数调用
printf("maxmum=%d",z);
}
省去主调函数对被调函数的函数说明的三种情况:
1.被调函数的返回值值整型或者字符型时
2.被调函数的函数定义出现在主调函数之前时,在主调函数可以直接调用
3.在所有函数定义之前,子啊函数外预先说明了各个函数的类型,则在以后的主调函数中,可不再说明。
例:
char str(int a);
main()
{
…
4000
}
char str(int a)
{
…
}
4.对库函数的调用不需要在做说明,但必须把该函数的头文件用include命令包含在源文件前部。
return语句的格式如下:
return 表达式;
或 return(表达式);
或 [return;]
无返回值函数的末尾可以有有一个不带表达式的return语句。
当函数的返回值类型与函数定义时的类型不一样的时候,返回值自动转换成函数定义的类型。
在函数形参表中,允许不给出性参数组的长度,或者用一个变量来表示数组元素的个数
例: void nzp(int a[])
或 void nzp(int a[], int n) /*n动态的该处数组长度
当形参为数组时,实参与形参实际上是同一数组,他们的值同时改变。数组名就是首地址,因此在数组名作函数参数时所进行的传送只是地址的传送,也就是说把是参数组的首地址赋予型参数组名。
内部函数与外部函数
内部函数:在一个源文件中定义的函数只能被本院文件中的函数调用,而不能在同一程序中其它源文件的函数调用。
定义:
static 数据类型 函数名(形参定义表)
{
函数体
}
外部函数:在一个源文件中的函数也可被其他源文件中的函数所调用。
定义:extern可省略,一般的函数都是外部函数
[extern] 数据类型 函数名(形参定义表)
{
函数体
}
在调用外部函数时需要声明。
函数的递归调用:
例:用递归法计算n!
long ff(int n)
{
long f;
if(n<0)
printf("n<0,input error");
else if(n==0|| n==1)
f=1;
else
f=ff(n-1)*n;
return(f);
}
main()
{
int n;
long y;
printf("input an inteager number:\n");
scanf("%d",&n);
y=ff(n);
printf("%d!=%d",n,f);
}
变量:
1.局部变量的定义和说明可以不加区别,外部变量需要。(全局变量与外部变量是同一种,全局变是从它的作用域提出的,外部变量是从它的存储方式提出的)
外部变量只能定义一次:例 [extern]类型说明符 变量名1,2,…
[extern] int a, b; /*extern可省略
2.在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。
3.变量的存储方式可分为两种,静态与动态。静态存储变量通常是在变量定义时就分定存储单元并一直保持不定,直至整个程序结束。动态存储变量是在程序执行过程中,使用它时才分配存储单元。静态局部变量在函数内定义,但生存期是整个程序,虽然离开了定义它的程序就不能使用,但是如果再次调用定义它的函数的时候,它又可继续使用并保留了上一次调用它的时候留下的值。静态全局变量则只能在同一源文件中才能使用,其他文件不能调用。
变量的存储类型:
动态存储方式: auto(自动变量,使用最广,可省略,不可作初始化赋值),register(寄存器变量,其他变量都存放在存储器中,这种变量存放在CPU的寄存器中,使用时不需要访问内存,直接从寄存器中读写,可提高效率)
静态存储方式:extern(外部变量),static(静态变量)
相关文章推荐
- 学ios需要了解的C语言基础知识-10-内外部函数,内外部变量
- C语言基础知识之(十二):结构体作为函数的参数(结构体变量、结构体数组)
- 黑马程序员——C语言基础知识整理——printf函数与scanf函数
- C语言基础知识学习(函数)
- 语言程序设计经典书籍《C++ Primer》 C++基础知识:函数,类 .........
- C语言基础知识之(六):数组-----数组类型、定义数组、读取数组、排序数组、字符串数组函数
- C语言基础知识【函数】
- 黑马程序员-C语言基础知识-函数
- C语言基础知识之(九):函数
- Linux-C基础知识学习:C语言作业-将5个学生成绩保存在一个数组中,单独实现一个计算平均成绩的average函数, 在main函数中获取该函数返回的平均值,并打印。
- C语言基础知识之函数
- C语言基础知识(个人简单总结的关于变量和函数方面)
- C语言基础知识——常变量以及输入输出函数
- C语言基础知识之(十五):指针和函数
- 【脚本语言系列】关于Python基础知识函数缓存,你需要知道的事
- 学ios需要了解的C语言基础知识-5-函数
- C语言基础知识之(十八):堆内存的分配函数及运用
- C语言基础知识之(十九):内存操作的其他函数:内存初始化,内存拷贝,内存比较
- Java语言基础知识
- php语言基础知识