C语言(函数)

八、函数

每个C程序的入口和出口都位于main()函数之中。

C语言的库函数是可以直接调用的

声明函数参数时必须具有相同的类型

函数定义

返回值类型 函数名(参数列表){/*函数头*/
	函数体(函数实现特定功能的过程)
}

函数头

标识一个函数代码的开始,这是一个函数的入口处

函数体

函数体位于函数头的下方,由一对大括号括起来,大括号决定了函数体的范围

函数要实现的特定功能都是在函数体部分,通过代码语句完成的,最后通过return语句返回实现结果

无参函数

返回值类型 函数名(){/*函数头*/
	函数体(函数实现特定功能的过程)
}

空函数

返回值类型 函数名(){/*函数头*/
	
}

函数声明

函数声明告诉编译器函数的名称、返回类型、参数类型以及;。它通常出现在函数定义之前,以便编译器知道在调用函数时如何解释函数的调用

返回值类型 函数名(参数列表);

注意

如果将函数的定义放在调用函数之前,就不需要进行函数的声明,此时函数的定义也就包含了函数的声明

这种隐式的声明只在函数定义在调用函数之前时才有效。如果函数定义在调用函数之后,或者函数在不同的源文件中定义和使用,通常还是需要进行显式的函数声明,以便编译器能够正确识别和连接函数调用。

返回语句

主要用途

利用返回语句能立即从所在的函数中退出,即返回到调用的程序中

返回语句能返回值,将返回值赋给调用的表达式。当然有限函数也没有返回值

返回值

函数的返回值可以通过函数中的return获得

return语句将被调用函数中的一个确定值返回到调用函数中。

函数返回值类型应当在定义函数时明确指出函数返回值类型

如果函数返回值类型和return语句中的表达式的值的类型不一样,则以函数返回值的类型为准。数值类型数据可以自动进行类型转换,即函数定义的返回值类型决定最终返回值的类型

函数参数

函数参数的作用时传递数据给函数使用

函数利用接收的数据进行具体的操作处理

形式参数与实际参数

形式参数:在定义函数时,函数名后面括号中的变量名称为形式参数,在函数调用之前,传递给函数的值将被复制到这些形式参数中

实际参数:在调用一个函数时,也就是真正使用一个函数时,函数名后面括号中的参数为实际参数。函数调用者提供给函数的参数叫做实际参数。实际参数说表达式计算的结果,并且被复制给函数的形式参数

数组作为函数参数

当数组作为函数实参时,只传递数组的地址,而不是将整个数组赋值到函数中。

当数组名作为实参调用函数时,指向该数组的第一个元素的指针就被传递到函数中

在C语言中,没有任何下标的数组名就是一个指向该数组的第一个元素的指针

当你声明一个数组时,例如 int arr[5];,arr 是数组的名称。
在大多数表达式中,arr 表示一个指向数组第一个元素的指针,即 &arr[0]。
这意味着 arr 本身的值是数组第一个元素的地址,它是一个指向 int 类型的指针 (int*)。

与指向第一个元素的指针*arr是相同的

使用数组名作为函数参数

int fun(int lim,int a[])

使用可变长度数组作为函数参数

void fun(int arr[])

使用指针作为函数参数

void fun(int *p)

main()函数的参数

main(int argc,char* argv[])

argc参数保存命令行的参数个数,是整型变量,这个参数的值至少是1,因为至少程序名就是第一个实参

argv参数是一个指向字符数组的指针,这个数组中的每一个元素都指向命令行实参,所有命令行实参都是字符串,任何数字都必须由程序转换成适当的格式

函数调用

函数语句调用

fun();

函数表达式调用

fun(1,2)

函数参数调用

fun1(fun2())

嵌套调用

在定义函数时,一个函数体内不能包含定义的另一个函数

int main(){
	void display(){
		函数体
	}
}
//这是错误的

虽然不能嵌套定义,但是可以嵌套调用函数,也就是说可以在一个函数体内,调用另一个函数

void fun1(){
 	函数体
}
void fun2(){
 	fun1()
}

递归调用

C语言的函数都支持递归,也就是说,每个函数都可以直接或间接的调用自己

内部函数

定义一个函数,如果只希望这个函数只被所在的源文件使用,就称这样的函数为内部函数

内部函数又称为静态函数

如果在不同源文件中有同名的内部函数,则这些同名的函数是互不干扰的

语法

static 返回值类型 函数名(参数列表)

外部函数

与内部函数相反的就是外部函数,外部函数是可以被其他源文件调用的函数

定义外部函数使用关键字extern进行修饰

在使用一个外部函数时,要先用extern声明所在的函数是外部函数

extern 返回值类型 函数名(参数列表)

默认外部函数,如果不指定的话

局部变量

变量声明在函数内部,无法被其他函数所使用

函数的形式参数也属于局部变量,作用范围仅限于函数的所有语句块

当然也包括嵌套在其中的子语句块

不同作用域可以使用相同标识符

全局变量

如果一个变量在所有函数的外部声明,这个变量就是全局变量

可以在程序中的任何位置进行访问的变量

全局变量不属于某个函数,而属于整个源文件

如果外部文件要使用全局变量,就要用extern关键字进行修饰

如果在一个函数中改变了全局变量的值,会影响到其他函数,慎用。但也相当于各个函数直接有直接传递的通道。

常用数学函数

使用数学函数时,要添加头文件#include<math.h>

abs()

求整型绝对值
int abs(int i);

labs()

求长整型绝对值
long labs(long i);

fabs()

求浮点型绝对值
double fabs(double i);

sin()

正弦函数
double sin(double i)

cos()

余弦函数
double cos(double i)

tan()

正切函数
double tan(double i)

isalpha()

检测有没有字母,如果参数i是字母表中的字母(大写或小写),则返回非0值;否则就返回0。使用这个函数需要添加头文件#include<ctype.h>
int isalpha(int i)

isdigit()

检测有没有数字,如果参数i是数字,则返回非0值;否则就返回0。使用这个函数需要添加头文件#include<ctype.h>
int isdigit(int i)

isalnum()

检测有没有数字或字母,如果参数i是(一个)数字或(一个)字母,则返回非0值;否则就返回0。使用这个函数需要添加头文件#include<ctype.h>
int isalnum(int i)
  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值