函数
注:本文为学习《C语言从入门到精通》时,对部分章节的总结
1、函数概述
2、函数定义
1.1、函数头
1.2、函数体
2.1、函数定义的形式
返回值类型 函数名(参数列表) // 函数头
{
函数体(函数实现特定功能的过程);
}
2.2、定义与声明
a、定义
返回值类型 函数名(参数列表) // 函数头
{
函数体(函数实现特定功能的过程);
}
b、声明
返回值类型 函数名(参数列表);
如果函数定义放在调用函数之前,就不需要函数声明,此时定义就包括了声明。
3、返回语句
return。
3.1、从函数返回
3.2、返回值
4、函数参数
4.1、形式参数与实际参数
a、形式参数:形式上存在的参数;函数定义时,函数名后面括号中的变量
b、实际参数:实际存在的参数;调用函数时,函数名后面括号中的参数
4.2、数组作函数参数
当数组作为函数的实参时,只传递数组的地址。
1.数组元素作为函数参数
void Fun(int num);
int main()
{
int str[3] = {1, 2, 3};
Fun(str[2]);
return 0;
}
2.数组名作为函数参数
void Fun(int num[3]);
int main()
{
int str[3] = {1, 2, 3};
Fun(str);
return 0;
}
3.可变长度数组作为函数参数
void Fun(int num[]);
int main()
{
int str[3] = {1, 2, 3};
Fun(str);
return 0;
}
4.使用指针作为函数参数
void Fun(int *num);
int main()
{
int str[3] = {1, 2, 3};
Fun(str);
return 0;
}
4.3、main函数的参数
main(int argc, char* argv[]) // 两个参数用来接受命令行实参
argc:保存命令行的参数个数
argv:指向字符指针数组的指针,这个数组的元素都指向命令行实参
5、函数的调用
5.1、函数的调用方式
a、函数语句调用:把函数的调用作为一个语句
Fun();
b、函数表达式调用:函数出现在一个表达式中,此时要求函数必须返回一个确定的值
int a = 3 * Fun();
c、函数参数调用:函数调用作为另一个函数的实参
int a = Fun1(Fun2());
5.2、嵌套调用
C语言不允许嵌套定义,但允许嵌套调用
void Fun1() {}
void Fun2()
{
Fun1();
}
int main()
{
Fun2();
return 0;
}
5.3、递归调用
C语言函数可以直接或间接地调用自己。
- 直接:函数Fun在函数体中调用本身
- 间接:函数Fun1在函数体中先调用函数Fun2,Fun2的函数体中调用Fun1
6、内部函数和外部函数
函数是C语言程序中的最小单位,可以把一个函数或多个函数保存为一个文件,这个文件成为源文件。定义一个函数后,这个函数就可以被另外的函数所调用。但当一个源程序有多个源文件组成时,可以指定函数不能被其他文件调用。于是,C语言函数就分为两类:内部函数和外部函数。
6.1、内部函数
又称为静态函数,只能在所在的源文件使用。不同的源文件中的同名内部函数互不干扰。
static 返回值类型 函数名(参数列表)
6.2、外部函数
定义外部函数使用关键字extern修饰。
extern 返回值类型 函数名(参数列表)
不指定函数类型时,默认为外部函数,也就是extern可以省略。
7、局部变量和全局变量
7.1、局部变量
局部变量:在函数内部定义的变量,函数的形参也属于局部变量;具有局部作用域
语句块中声明的变量仅在该语句块内部使用。
7.2、全局变量
程序的编译单位是源文件。
全局变量:在函数外部声明的变量,不属于某个函数,属于整个源文件,外部文件使用时,需要用extern进行修饰。
8、函数应用
在使用数学函数时,需要添加头文件 #include <math.h>
8.1、abs函数
int abs(int i); // 求整数的绝对值
8.2、labs函数
long labs(long n); // 求长整数的绝对值
8.3、fabs函数
double fabs(double x); // 求浮点数的绝对值
8.4、sin函数
double sin(double x); // 求正弦值
8.5、cos函数
double cos(double x); // 求余弦值
8.6、tan函数
double tan(double x); // 求正切
8.7、isalpha函数
int isalpha(int ch); // 如果ch是字母表中的字母,返回非零,
需要#include <ctype.h>
8.8、isdigit函数
int isdigit(int ch); // 如果ch是数字,返回非零,
需要#include <ctype.h>
8.9、isalnum函数
int isalnum(int ch); // 如果ch是字母表中的字母或数字,返回非零,
需要#include <ctype.h>