完整教程:本文介绍了函数的基本概念和应用:1)函数通过封装代码解决冗余问题,提高代码复用性;2)详细讲解了main函数的三种形式;3)说明函数定义的四种形式(无参无返回、有参无返回、无参有返回、有参有返回);4)强调函数声明的作用及要求;5)阐述了函数的三种调用方式及参数传递机制;6)区分形参和实参的异同;7)展示了基本类型、数组和指针作为函数参数的用法;8)介绍了不同类型作为函数返回值的
目录
1.函数的作用
函数的作用是封装代码,当一个代码被多次使用时,我们就可以通过函数来调用这个函数,可以有效解决代码的冗余现象,还有把代码写成函数形式时方便我们进行移植,使代码变得更加灵活。
2.main函数
(1)int main(){};
(2)void main(){};
#include
int main(int argc,char *argv[])
{
//argc -- 传入参数的个数
//argv -- 传入参数的内容
for(int i = 0;i
3.函数的定义
1.定义
返回值类型 函数名(形参){函数体};
返回值类型:所有的数据类型,void(无返回值)
函数名和变量名的命名规则一样最好使用驼峰命名法getusername -- Get_User_Nmae。
形参:形式参数没有具体值,但是要占据内存空间,归函数所有。使用形参的目的的是该数值的值不确定,函数体可以根据该形参的值,得到不同的结果,是函数更灵活多用。
函数体:函数功能实现的具体实现代码
2.函数的定义形式
无参无返回 -- 刚开始接触时最好使用这种形式边写边修改
void fun()
{
printf("fun....\n");
}
有参无返回
有参函数,在进行参数定义时,不能简写int(a,b),但是定义的参数个数不限,建议有3个以上相同数据类型的参数时,可以使用数组作为参数。
void fun1(int a,int b)
{
int c = a+b;//形参归函数所有,可以直接使用
printf("fun....\n");
}
无参有返回
有返回值类型的函数,在函数体中必须使用return返回一个该类型的数据
int fun2(void)
{
printf("fun2....\n");
return 0;
}
有参有返回
int fun3(int a,int b)
{
int c = a+b;
printf("fun3....\n");
return c;
}
4.函数声明
作用:让调用者知道被调用函数的存在
内容:返回值类型 函数名(形参); 声明函数与形参的数量,顺序,类型有关,与形参的名称无关。
//函数声明
viod fun();
int fun3(int,int);
5.函数的调用
函数的调用方式
函数的调用方式可以分为三种:主函数调用子函数,子函数调用子函数,子函数调用自己,最后一种我们称之为递归。
函数的执行顺序
函数的调用遵循中断机制,用下面的图来演示。

函数的调用形式
无参无返回 -- 函数名();
有参无返回 -- 函数名(实参); -- 函数在定义时有形参,在函数调用时必须提供实参。
无参有返回 -- 返回值类型 标识符 = 函数名();
有参有返回-- 返回值类型 标识符 = 函数名(实参);
6.形参与实参
形参:形式参数没有具体值,占用内存空间,在函数定义时使用,具有占位和约束作用(约束实参)。
实参:实际参数,具有具体值,占用内存空间,在调用函数时,具有给形参赋值的作用。实参要与形参的类型,数量,顺序保持一致。
形参和实参可以重名,不占用同一个内存空间,应为他们定义时的位置不同。
形参:int a; 实参:int b = 10; a等效b。
7.函数与参数相关的应用
基本数据类型作为函数的参数 --传递的是值
int Fun1(int a,int b);
int main()
{
int a = 5,b = 10;
printf("%d\n",Fun1(a,b));
return 0;
}
int Fun1(int a,int b)
{
int c = a + b;
return c;
}
数组作为函数的参数 -- 它传递的是数组的首地址,所以要把长度一起进行传递
void Fun1(int num[],int l);
int main()
{
int num[5] = {1,2,3,4,5};
Fun1(num,5);
return 0;
}
void Fun1(int num[],int l)
{
for(int i = 0;i
指针作为函数的参数
void Fun1(int *a,int *b);
int main()
{
int a = 14,b = 17;
Fun1(&a,7b);
printf("%d\t%d\n",a,b);
return 0;
}
void Fun1(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
8.函数与返回值相关的应用
基本数据类型作为函数的返回值
int Fun1(int a,int b);
int main()
{
int a = 5,b = 10;
printf("%d\n",Fun1(a,b));
return 0;
}
int Fun1(int a,int b)
{
int c = a + b;
return c;
}
数组作为函数的返回值 -- 实际返回的是数组的首地址
char * Fun();
int main()
{
printf("%s/n",fun());
return 0;
}
char *fun()
{
static char ch[1024] = "hello";
return ch;
}
指针作为函数的返回值 -- 本质就是一个指针函数
char * Fun();
int main()
{
printf("%s/n",fun());
return 0;
}
char *fun()
{
static char ch[1024] = "hello";
return ch;
}
9.指针函数和函数指针
指针函数 -- 返回值类型是指针的函数 -- 是一个函数
定义: 类型 *函数名(形参){};
函数指针 -- 函数类型的指针 -- 是一个指针
定义: 类型 (*标识符)(形参) = 初始值;
应用: 使用指针名代替函数名进行函数调用 -- Fun(); -- p();
void Fun();
int main()
{
//定义函数指针
void (*p)(void) = fun;
//调用函数
p();
return 0;
}
void fun(void)
{
printf("函数指针.....\n");
}
函数指针数组 -- 函数指针类型的数组它的数组元素是函数指针
定义:类型 (*标识符[长度])(形参) = 初始值;
void fun();
void fun1();
void fun2();
int main()
{
//定义函数指针
void (*p[3])(void) = {fun,fun1,fun2};
//调用函数
for(int 1 = 0;i<3;i++)
{
p[i]();
}
return 0;
}
void fun(void)
{
printf("函数指针.....\n");
}
void fun1(void)
{
printf("函数指针.....\n");
}
void fun(void)
{
printf2("函数指针.....\n");
}
10.全局变量和局部变量
全局变量 局部变量 定义位置 {},一般main上边 {}内 初始值 具有默认值,一般为0 随机数 生命周期 整个程序中存活 {}结束而结束 作用域 整个程序中活动 {}内活动
可以重名因为他们定义位置不同
重名后优先使用局部变量遵循就近原则
11.关键字
extern -- 借用外部资源
修饰函数或全局变量的声明,表示该全局变量或函数是引用外部文件的内 容 -- 需要可外部文件一块编译
static 提高局部变量的声明周期,但是不提高其作用域。
修饰全局变量或函数的定义,表示该全局变量或函数私有化,不允许外部 文件借用。
12.C 语言五大区
(1)栈区 -- 定义变量时使用,自动开辟,自动收回
(2)堆区 -- 手动开辟,手动释放
(3)全局区/静态区(static) -- 全局变量或 static 修饰的变量
(4)常量区 -- 常量
(5)代码区 -- 函数

浙公网安备 33010602011771号