函数:

后续开发过程中会遇到很多重复性的工作,不同的模块需要调用相同的代码,这时可以把这些需要重复调用的代码单独封装起来,后续方便调用。

  • 代码的冗余性

  • 代码的维护性

  • 代码的可读性

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;
}

无参数无返回值

一般用于提示性的语句

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐