函数的基本概念和用途
文章介绍了函数的基本概念和用途,强调其减少代码冗余、提高维护性和可读性。以main函数为例说明函数模板结构,包括返回值类型、函数名、参数列表和函数主体。详细分类了四种函数类型,并通过GetMax和ShowMax示例展示有返回值和无返回值函数的实现与调用流程。最后提到函数文档注释的重要性。
函数:
后续开发过程中会遇到很多重复性的工作,不同的模块需要调用相同的代码,这时可以把这些需要重复调用的代码单独封装起来,后续方便调用。
-
代码的冗余性
-
代码的维护性
-
代码的可读性
main函数为例的函数模板
main函数是一个标准的函数模板
int main(int argc, const char *argv[])
{
/*code*/
return 0; //必须与前面的int保持一致
}
-
int :函数的返回值类型:函数执行完毕后对外的结果的类型。
-
main : 函数名 函数名要求:见名知意,约定俗称,动宾结构(下划线命名法,大驼峰,小驼峰)
-
main函数是整个工程或者项目的入口
-
函数名在一定区域内具有唯一性
-
-
main后面( )里面的内容:形式参数列表(与之对应的是实际参数)
-
int argc :argc argument count :int类型,形式参数的个数
-
const char *argv[ ] :argument value :对应的参数值
-
-
code:函数主体
-
return 0:函数的返回值为0,函数执行完毕后对完的结果就是这个返回值。返回值与函数的返回值类型必须一致。
函数(API)格式
返回值类型 函数名(形式参数)
{
函数主体;
返回值;
}
ReturnType FuncitionName(ArgumentType)
{
FuncitoinBody;
ReturnValue;
}
函数分类
-
有参数有返回值
-
有参数无返回值
-
无参数有返回值
-
无参数无返回值
有参数有返回值函数
函数需求:现在需要一个函数,用户提供两个int类型的数据,函数执行完,返回这两个数据中较 大的那一个。
需求分析:
返回值类型:返回的是两个int中的一个,所以也是int类型
函数名:GetMax
形式参数:int num1 ,int num2
-
int num1 :用户提供的第一个数据的类型,是int类型。以确定参数类型为主,不需要明确告知参数具体是几。
-
int num2 :用户提供的第二个数据的类型,是int类型。以确定参数类型为主,不需要明确告知参数具体是几。
-
形式参数之间用 ,隔开
-
后续会遇到多个不同类型的形式参数,后续传值的时候必须一一对应!
函数主体:比较两个int类型的数据,哪一个更大
返回值:较大的那个int类型的数据
函数:
int GetMax(int num1 ,int num2)
{
/*code*/
return 较大的那一个;
}
函数的使用流程:
- 需要声明函数:为了方便后续调用,需要提前告知整个工程或者项目有这样一个函数存在。
- 需要实现函数:函数具体要实现什么样的功能,需要开发者自己去写。
- 调用函数:函数是块砖,哪里需要哪里搬。
1.函数声明
一般放在main函数前面

2.函数实现
一般放在main函数后面

3.函数调用
哪里需要,哪里调用

函数文档注释
后续在开发过程中,代码和函数会越来越复杂,所以需要添加必要的文档注释,有如果有必要,还需要附加使用案例,以及易错说明。
函数文档注释模板:
/**
* 函数功能:用户提供两个int类型的数据,函数执行后,返回那个较大的
*
* @param num1 用户提供的第一个int类型的数据
*
* @param num2 户提供的第二个int类型的数据
*
* @return int 较大的那一个
*
*
*/
int GetMax(int num1 , int num2);//1.函数声明,一般放到main函数后面
有参数无返回值
函数需求:用户提供两个int类型的数据,函数执行完毕后,直接打印出较大的那个结果
分析:
-
函数返回值:直接打印出较大的那个结果:从这里面可以分析出,直接打印较大的那个数值即可,不需要再返回。所以用void
-
函数名字:ShowMax 直接展示那个较大值
-
函数参数:
-
int num1 :用户提供的第一个数据的类型,是int类型。以确定参数类型为主,不需要明确告知参数具体是几。
-
-
int num2 :用户提供的第二个数据的类型,是int类型。以确定参数类型为主,不需要明确告知参数具体是几。
-
函数主体:比较出来哪一个大,然后进行打印
-
函数返回值:无返回值 return ;
void ShowMax(int num1, int num2);
函数修改参数前瞻:
请思考一个问题:
现在需要一个函数,用户提供一个int类型的数据,函数执行完毕后,这个int类型的数据变大为原来的2倍
方法1:未实现
有参数无返回值:
注意:函数执行完毕后num的值并没有改变
#include<stdio.h>
/**
* 函数功能:函数执行完以后,num值翻倍
*
* @param num :用户提供的int类型的数据
*
* @return 无
*/
void DoubleNum(int num);
int main(int argc, char const *argv[])
{
int num = 0;
printf("请输入一个num\n");
scanf("%d",&num);
DoubleNum(num);
printf("num= %d\n",num);
return 0;
}
void DoubleNum(int num)
{
num = num * 2;
}

为了改变这个结果:需要在对应的地址上进行操作
拓展:
-
如果想通过函数来修改对应参数值,需要传地址进去(指针)
-
如果想通过函数来修改对应的参数地址,需要传地址的地址进去(二级指针)

方法2:
有参数有返回值(函数外部修改,所以不需要传地址进去)
#include<stdio.h>
/**
* 函数功能:函数执行完毕后,返回int类型数据的2倍
*
* @param:num 用户提供的int类型的数据
*
* @return:2*num
*/
int DoubleNum2(int num);
int main(int argc, char const *argv[])
{
int num = 0;
printf("请输入你想要的num\n");
scanf("%d",&num);
num = DoubleNum2(num);
printf("函数执行完以后的结果是%d\n",num);
return 0;
}
int DoubleNum2(int num)
{
return num*2;
}
有返回值无参数
函数需求:give me five 函数执行完以后,给我一个5(int)
需求分析:
-
返回值:int类型
-
函数名:GiveMeFive
-
函数参数:无参数
-
函数返回值:5
#include<stdio.h>
/**
* 函数功能:函数执行完以后,给我一个5
*
* @param this funcition has no parameter
*
* @return 5(int)
*/
int GiveMeFive(void);
//给我10个数,从小到大排列,都是5的倍数
int main(int argc, char const *argv[])
{
for (int i = 1; i <=10; i++)
{
printf("%d ",i*GiveMeFive());
}
printf("\n");
return 0;
}
int GiveMeFive(void)
{
return 5;
}
无参数无返回值
一般用于提示性的语句
更多推荐



所有评论(0)