4-函数

49 阅读2分钟

知识点一:函数的概述

  • 函数的定义:实现函数功能、确定函数体、返回值类型、形参类型。让函数存在

  • 函数的声明:不是实现函数功能仅仅是说明该函数有返回值类型、形参类型、函数名

  • 函数的调用:函数的执行

1、函数的定义

//返回值类型:函数将来返回值的类型
//函数名:函数的入口地址
//形参:函数外部数据 传递到 函数内部的 桥梁
//函数体:具体的函数功能带
返回值类型 函数名(形参类型 形参)        //形参可以不止一个
{
    函数体;
}

2、函数声明

返回值类型 函数名(形参类型 形参);        //形参可以不止一个

3、函数调用

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

只有函数的调用在函数定义的下方(不推荐),才可以不函数声明

#include<stdio.h>

//函数的定义
void my_fun()
{
    printf("my fun\n");
    return;
}
int main(int argc,char *argv[])
{
    //函数的调用:函数名+()
    my_fun();
    return 0;
}

知识点二:函数参数

如果函数没有参数需要将 形参 写成 void

函数参数传递

  • 函数形参本质:函数局部变量

  • 形参在函数定义的时候不会开辟空间,只在函数调用的时候才开辟空间

  • 形参在函数结束的时候才被释放

  • 函数名代表的是函数的入口地址

  • 函数返回值:

    • <=4 字节存放 寄存器

    • 大于4 字节存放 栈区

函数参数传递过程
#include<stdio.h>

int my_add(int a, int b);

int main(int argc,char *argv[])
{
    int data1 = 10, data2 = 20;

    //需求:请定义一个函数 计算data1+data2
    int ret = my_add(data1,data2);	//data1 data2 实参

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

int my_add(int a, int b)	//a b 形参
{
	return a+b;
}

知识点三:内联函数

将项目中某些常用的简单逻辑的函数申请为内联函数,在编译之前,就会将主调函数中调用该内联函数的位置,直接替换为该函数体的内容,再进行编译,这样就省去了运行时,调用函数的CPU开销时间,大大的提升程序的执行效率。

大小端(字节序):

大端:高字节存放在低地址

小端:高字节存放在高地址