帮助大家理解函数

文章目录

  • .函数的定义

  • .函数的传参

  • 三.函数的返回值

  • 四.函数的调用

函数的定义

语法:返回值:函数名(形参){

        语句体;

        return __;(返回值)

}

注意:

        1.函数返回值必须和return后面的数据类型一致;

        2.void 表示没有返回值;

        3.return 具有返回数据和结束程序的作用;

        4.函数参数必须要和定义的时候参数类型一致;

代码展示;

#include <stdio.h>
void printf();
int main(){
    printf();
    return 0;
}
void printf(){
    printf("I am the superman\n");
    return;
    printf("程序已经结束");
}

 函数的传参

1.传参的含义(无论是什么传参都是赋值传参)

2.两种传参(形参:函数定义时的参数;实参:函数调用时用的参数)

        a.值传递

        b.址传递

如何理解值传递看代码:

#include <stdio.h>
int num(int a){
    a=1001;
    return a;
}

int main(void){
    int a=9999;
    num(a);
    printf("%d\n",a);
    printf("%d",num(a));
    return 0;
}

此处由运算结果a=9999,num(a)=1001可以看出,传入的实参a,经过函数的运算并不会改变原本函数参数a,只是改变函数内部的参数a,也就是说两者的内存地址是不一致的

如何理解址传递

#include <stdio.h>
int num(int *a){// *a==&a
    *a=1001;
    return *a;
}

int main(void){
    int a=9999;
    num(&a);//放入a的地址
    printf("%d\n",a);
    return 0;
}

此处的为址传递,通过指针修改参数a的值,这里两个参数的内存地址都是一样的,所以主函数的a被修改了

函数的的返回值

1.函数的返回值函数调用后的唯一遗留物,它是一个值,值得右值,只能放在运算符的右侧

2.什么时候需要写void,什么时候需要其他类型

3.需要大家自己决定,自己函数设计调用完,需不需要(通过作用来决定)存在遗留的值

        a.一种是效果类,单纯的封装部分代码的作用

        b.一种是数据处理的,需要得到处理后的结果

效果类代码展示

#include <stdio.h>
 void menu(){
    printf("-----开始----\n");
    printf("-----结束----\n");
 }

 void shuzu(int a[5]){//遍历一个数组
    for(int i=0;i<5;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
 }

 int main(){
    menu();
    int a[5]={0,1,2,3,4};
    shuzu(a);
    return 0;
 }

这里的输出两个函数都是不需要返回值的,因为这只是一种效果,没有涉及函数的数据运算

数据处理类

#include <stdio.h>
 int search( int a[5],int beizhaoshu){//在数组中寻找数
    for(int i=0;i<5;i++){
        if(a[i]==beizhaoshu){
            return 1;
        }
    }//一般做判断的时候我们都会用标志性1和0来表示判断结果
    return 0;
 }
 int main(void){
    int a[5]={0,1,2,3,4};
    int beizhaoshu;
    scanf("%d",&beizhaoshu);
    int result = search(a,beizhaoshu);//接收返回值
    if(result == 1){
        printf("找到了\n");
    }
    else if(result==0){
        printf("NONE\n");
    }
    return 0;
 }

这里比较大小属于数据处理


函数的调用 

函数的调用

        1.调用方式:函数名(函数参数)

        2.函数参数必须和函数定义时候参数类型一致

        3.如果不一致时候,若可以转换,不会报错,不能转换会报错

        4.无法将参数1从"const char[7]"转换为"int" 说明线束类型不一致报错

嵌套函数

        1.已另外一个函数的返回值当做参数嵌套

        2.通过参数的递推,形参的递柜调用(自己调用自己)

                .推出性条件

                .推导公式(数学推导,归纳法)

        例子 1 1 2 3 5 8

        第三项起,前两项加起来等于第三项;

嵌套函数代码展示

 

#include <stdio.h>
int Max(int a,int b){
    if(a>b){
        return a;
    }
    else{
        return b;
    }
}
int main(){
    int a=0;
    int b=1;
    int c=2;
    int d=3;
    //因为这里的参数类型都是一致的,虽然名字不同但也可以直接传进函数进行运算
    int max = Max(d,Max(c,Max(a,b)));
    printf("%d",max);
    return 0;
}

这里的 Max(d,Max(c,Max(a,b))) 运算要重最里面一开始停往外算,

例如:        这里一开始传入a=0,b=1;经过函数比较输出b的值,然后b的值就相当于Max(a,b)继续与c进行比较,然后输出了c的值.......以此类推.

递推函数调用

        例子 1 1 2 3 5 8

        第三项起,前两项加起来等于第三项;

#include<stdio.h>
int f(int n){
    //推出性公式
    if(n==1||n==2)
        return 1;
    else{
        return f(n-1)+f(n-2);//自己调用自己
    }//推导公式
}
int main(){
    int n=5;
    int result = f(n);
    printf("%d",result);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不吃牛肉!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值