找回密码
 register

QQ登录

只需一步,快速开始

[*编程自学*] 第十六课(03.00~03.01):函数

[复制链接]

[*编程自学*] 第十六课(03.00~03.01):函数

[复制链接]
Waylee

主题

0

回帖

7914

积分

仙帝

积分
7914
Waylee 2024-8-4 23:41 | 显示全部楼层 |阅读模式

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×
1.库函数:
编译器提供的可在C源程序中调用的函数.为两类:
  • 一类是C语言标准库规定的库函数
  • 一类是编译器提供的库函数
2.用户自定义函数
用户把自己的算法编成一个个相对独立的函数模块,通过调用的方法来使用函数
可以参考 <<Linux下的C函数手册.chm >> :
Linux下的C函数手册.chm (335.8 KB, 下载次数: 0, 售价: 2 金币)
函数概述:
函数的定义:实现函数功能\确定函数体\返回值\形参.让函数存在.
函数的声明:不是实现函数功能,仅仅说明该函数有返回值类型\形参类型\函数名.
函数的调用:函数的执行
1.函数的定义:
//返回值类型:函数将来返回值的类型
//函数名:函数的入口地址
//形参:函数外部数据 传递到函数内部的桥梁
//函数体:具体的函数功能
返回值类型 函数名(形参类型 形参)
{
    函数体;
}

2.函数声明:
返回值类型 函数名(形参类型 形参)

3.函数的调用
//函数外部的实际数据
函数名(实参);
[b]案例:
[pre]#include<stdio.h>
//函数的声明:告诉编译器 该函数存在 请通过编译
void myfun();
int main(int argc,char *argv[])
{
        //函数的调用:函数名+()
        myfun();
        return 0;
}
//函数的定义
void myfun()
{
        printf("my fun\n");
        return; //1.返回函数结果 2.结束函数
}

可以省略函数声明:函数的调用在函数定义的下方 就可以省略函数声明
函数参数
1.如果函数没有参数 请将形参写成 viod
#include<stdio.h>
void myfun(void);
int main(int argc,char *argv[])
{
        //myfun(10,20);//err
        myfun();
        return 0;
}
//如果函数的参数 为void 在调用的时候 就不要给函数传递实参
void myfun(void)
{
        printf("my fun\n");
        return;
}

3.函数参数的传递
#include<stdio.h>
int my_add(data1,data2);
int main(int argc,char *argv[])
{
        int data1 = 10,data2=20;

        int ret = my_add(data1,data2);
        printf("ret = %d\n",ret);
        return 0;
}
int my_add(int a,int b)
{
        int ret = a + b;
        return ret;
}

12.jpg
注意:
  • 函数的形参 本质 是函数的局部变量
  • 形参 函数定义的时候不会开辟空间,只在函数调用的时候才开辟空间
  • 形参 在函数结束的时候才被释放.
int my_add(int a,int b) //a b 就是形参
{
        int ret = a + b;
        return ret;
}

   4.函数名代表的是函数的入口地址
#include<stdio.h>
int my_add(data1,data2);
int main(int argc,char *argv[])
{
        int data1 = 10,data2=20;

        int ret = ((int(*)(int,int))(0x0040100F))(data1,data2);//my_add(data1,data2);
        printf("ret = %d\n",ret);
        printf("%p\n",my_add);//my_add代表函数的入口地址
        return 0;
}
int my_add(int a,int b) //a b 就是形参
{
        int ret = a + b;
        return ret;
}

  5.函数的返回值 <= 4 字节 存放寄存器, >4字节 存放在栈区
案例:自定义对应函数 求一个数组最大值 和 最小值
#include<stdio.h>

void my_input_arr(int a[5],int len)
{
        int i = 0;
        printf("请输入%d个int数据\n",len);
        for(i=0;i<len;i++)
        {
                scanf("%d",&a);
        }
}

void my_print_arr(int a[5],int len)
{
        int i = 0;
        for(i=0;i<len;i++)
        {
                printf("%d ",a);
        }
        printf("\n");
}

int my_max(int a[5],int len)
{
        int i = 0;
        int tmp_max = 0;
        for(i=0;i<len;i++)
        {
                if(tmp_max <a)
                        tmp_max = a;
        }
        return tmp_max;
}

int my_min(int a[5],int len)
{
        int i = 0;
        int tmp_min = a[0];
        for(i=0;i<len;i++)
        {
                if(tmp_min > a)
                        tmp_min = a;
        }
        return tmp_min;
}
void test01()
{
        int arr[5]={0};
        int n = sizeof(arr)/sizeof(arr[0]);
        int i =0;
        int max = 0,min = 0;
        int ret = 0;
        //键盘给数组赋值
        my_input_arr(arr,n);
        
        //遍历该数组
        my_print_arr(arr,n);

        //计算数组的最大值
        max = my_max(arr,n);
        printf("max = %d\n",max);

        //计算数组的最小值
        min = my_min(arr,n);
        printf("min = %d\n",min);
        return;
}
int main(int argc,char *argv[])
{
        test01();
        return 0;
}


案例:分文件
main.c
#include<stdio.h>
#include"my_fun.h"
void test01()
{
        int arr[5]={0};
        int n = sizeof(arr)/sizeof(arr[0]);
        int i =0;
        int max = 0,min = 0;
        int ret = 0;
        //键盘给数组赋值
        my_input_arr(arr,n);
        
        //遍历该数组
        my_print_arr(arr,n);

        //计算数组的最大值
        max = my_max(arr,n);
        printf("max = %d\n",max);

        //计算数组的最小值
        min = my_min(arr,n);
        printf("min = %d\n",min);
        return;
}
int main(int argc,char *argv[])
{
        test01();
        return 0;
}

my_fun.c
#include<stdio.h>
#include"my_fun.h"
void my_input_arr(int a[5],int len)
{
        int i = 0;
        printf("请输入%d个int数据\n",len);
        for(i=0;i<len;i++)
        {
                scanf("%d",&a);
        }
}

void my_print_arr(int a[5],int len)
{
        int i = 0;
        for(i=0;i<len;i++)
        {
                printf("%d ",a);
        }
        printf("\n");
}

int my_max(int a[5],int len)
{
        int i = 0;
        int tmp_max = 0;
        for(i=0;i<len;i++)
        {
                if(tmp_max <a)
                        tmp_max = a;
        }
        return tmp_max;
}

int my_min(int a[5],int len)
{
        int i = 0;
        int tmp_min = a[0];
        for(i=0;i<len;i++)
        {
                if(tmp_min > a)
                        tmp_min = a;
        }
        return tmp_min;
}

my_fun.h
//声明函数
//extern 告诉编译器 该函数来自于其他文件(extern 声明函数外部可用)
extern void my_input_arr(int a[5],int len);
extern void my_print_arr(int a[5],int len);
extern int my_max(int a[5],int len);
extern int my_min(int a[5],int len);

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |网站地图|天天打卡

GMT+8, 2024-11-24 13:11 , Processed in 0.085274 second(s), 11 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表