C语言--函数

1. 函数定义

语法:

复制代码
类型标识符 函数名(形式参数)
{
    函数体代码
}

(1)类型标识符 --- 数据类型(函数要带出的结果的类型)

**注:数组类型不能做函数返回结果的类型,**如果函数不需要带出什么结果,此时返回结果的类型说明符为void,如果返回结果的类型与类型说明符不一致,以类型说明符为准(类型说明符不写,默认为int)。

(2)函数名 --- 标识符,符合标识符命名规则

(3)形式参数 --- 表示改函数需要用到的数据

**注:每一个形参变量都得指定类型,****实参和形参需要类型匹配,****参数个数相同,顺序一一对应,**如果不需要接收实际参数,形参一般设计为void

(4)函数体代码 --- 实现函数功能的代码。

写法:

复制代码
数据类型 形参变量名1,数据类型 形参变量2...
int a,int b

int a,b     // 不能这样写

2. 函数调用

函数调用的本质:实际上是利用栈的结构,先进后出,保证了函数可以层层嵌套调用。

调用者和被调用者:main函数时整个程序的入口,只能是调用者

注:函数不支持嵌套定义,但是可以嵌套调用

函数名是函数的入口地址。

3. 递归

可以实现循环的功能,是一种特殊的循环。

直接递归:自己调用自己

间接调用:调用其他函数,其他函数调用了自己,这样又实现了调用自己。

代码实现思路:

(1)递推关系 --- 从问题n到问题n - 1;

(2)递推结束的条件

eg:前 n 项的累加求和

sum(n)=> sum(n-1)+ n //递推关系

n = 1; // 结束条件

复制代码
#include<stdio.h>

int sum(int n)
{
    if(n==1)                    // 递推结束条件
    {
        return 1;
    }else
    {
        return sum(n-1)+n;     // 递推关系
    }
}

int main(void)
{
    int n;
    printf("Input a num:");
    scanf("%d",&n);

    int ret = sum(n);

    printf("%d\n",ret);
    return 0;
}

代码运行结果:

4. 数组作为函数参数

(1)数组元素作为函数参数--- a0

(2)数组本身作为函数参数--- a

形参--- 写成数组形式,还需要数组长度

实参--- 数组名,数组长度

复制代码
printfArray(int a[],int len)    // 形参

printArray(a,len);    //调用

eg:打印数组元素

复制代码
#include<stdio.h>

void printArray(int a[],int len)        // 定义形参
{
    int i = 0;
    for(i = 0;i < len;++i)
    {
        printf("a[%d] = %d\n",i,a[i]);
    }
}

int main(void)
{
    int a[] = {1,2,3,4,5,6,7,8,9};
    int len = sizeof(a)/sizeof(a[0]);

    printArray(a,len);                  // 调用时传入实参
    return 0;
}
相关推荐
无毁的湖光-Al几秒前
解Bug之路-with AI-应用被限流?
java·linux
Brilliantwxx2 分钟前
【Linux】 进程(4)七大进程状态深度解析
linux·运维·算法
国际云,接待12 分钟前
df 显示磁盘还有空间却无法写文件:Linux inode 耗尽排查与治理
linux·运维·服务器
科信集团30 分钟前
政策科普|广东省绿色制造体系全解读
学习·制造·绿色
一路向北finish1 小时前
《CentOS 7 搭建 Hadoop 3.3.6 分布式集群:NFS 共享方案完整实操》
linux·运维·hadoop·分布式·centos
迪丽热爱1 小时前
多媒体应用9-823
学习
raindayinrain1 小时前
深入理解Linux内核--缺页异常,写时复制
linux·写时复制·缺页异常
m4Rk_1 小时前
【论文阅读】Agent 记忆机制(48):Fine-Mem——用细粒度奖励解决长期记忆管理中的奖励稀疏与信用分配
论文阅读·人工智能·学习·开源·github
是隼人1 小时前
buuctf-pwn axb_2019_fmt32题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
txg6661 小时前
Less Is More:如何用半监督学习提升漏洞检测能力
人工智能·深度学习·学习·安全·开源软件