完整教程:本文介绍了函数的基本概念和应用:1)函数通过封装代码解决冗余问题,提高代码复用性;2)详细讲解了main函数的三种形式;3)说明函数定义的四种形式(无参无返回、有参无返回、无参有返回、有参有返回);4)强调函数声明的作用及要求;5)阐述了函数的三种调用方式及参数传递机制;6)区分形参和实参的异同;7)展示了基本类型、数组和指针作为函数参数的用法;8)介绍了不同类型作为函数返回值的

目录

        1.函数的作用

        2.main函数

        3.函数的定义

      1.定义

        2.函数的定义形式

        4.函数声明

        5.函数的调用

        函数的调用方式

        函数的执行顺序

        函数的调用形式

        6.形参与实参

        7.函数与参数相关的应用

        8.函数与返回值相关的应用


        1.函数的作用

        函数的作用是封装代码,当一个代码被多次使用时,我们就可以通过函数来调用这个函数,可以有效解决代码的冗余现象,还有把代码写成函数形式时方便我们进行移植,使代码变得更加灵活。

        2.main函数

        (1)int main(){};

        (2)void main(){};

        (3)int main(int argc,char *argv[]){};
#include 
int main(int argc,char *argv[])
{
    //argc -- 传入参数的个数
    //argv -- 传入参数的内容
    for(int i = 0;i

        3.函数的定义

      1.定义

        返回值类型 函数名(形参){函数体};

        返回值类型:所有的数据类型,void(无返回值)

        函数名和变量名的命名规则一样最好使用驼峰命名法getusername -- Get_User_Nmae。

        形参:形式参数没有具体值,但是要占据内存空间,归函数所有。使用形参的目的的是该数值的值不确定,函数体可以根据该形参的值,得到不同的结果,是函数更灵活多用。

        函数体:函数功能实现的具体实现代码

        2.函数的定义形式

        无参无返回  -- 刚开始接触时最好使用这种形式边写边修改

void fun()
{
    printf("fun....\n");
}

        有参无返回

        有参函数,在进行参数定义时,不能简写int(a,b),但是定义的参数个数不限,建议有3个以上相同数据类型的参数时,可以使用数组作为参数。

void fun1(int a,int b)
{
    int c = a+b;//形参归函数所有,可以直接使用
    printf("fun....\n");
}

        无参有返回

        有返回值类型的函数,在函数体中必须使用return返回一个该类型的数据

int fun2(void)
{
    printf("fun2....\n");
    return 0;
}

        有参有返回

int fun3(int a,int b)
{
    int c = a+b;
    printf("fun3....\n");
    return c;
}

        4.函数声明

        作用:让调用者知道被调用函数的存在

        内容:返回值类型  函数名(形参); 声明函数与形参的数量,顺序,类型有关,与形参的名称无关。

//函数声明
viod fun();
int fun3(int,int);

        5.函数的调用

        函数的调用方式

        函数的调用方式可以分为三种:主函数调用子函数,子函数调用子函数,子函数调用自己,最后一种我们称之为递归。

        函数的执行顺序

        函数的调用遵循中断机制,用下面的图来演示。

        函数的调用形式

        无参无返回 -- 函数名();

        有参无返回 -- 函数名(实参); -- 函数在定义时有形参,在函数调用时必须提供实参。

        无参有返回 -- 返回值类型 标识符 = 函数名();

        有参有返回-- 返回值类型 标识符 = 函数名(实参);

        6.形参与实参

        形参:形式参数没有具体值,占用内存空间,在函数定义时使用,具有占位和约束作用(约束实参)。

        实参:实际参数,具有具体值,占用内存空间,在调用函数时,具有给形参赋值的作用。实参要与形参的类型,数量,顺序保持一致。

        形参和实参可以重名,不占用同一个内存空间,应为他们定义时的位置不同。

        形参:int a; 实参:int b = 10;  a等效b。

        7.函数与参数相关的应用

        基本数据类型作为函数的参数 --传递的是值

int Fun1(int a,int b);
int main()
{
    int a = 5,b = 10;
    printf("%d\n",Fun1(a,b));
    return 0;
}
int Fun1(int a,int b)
{
    int c = a + b;
    return c;
}

        数组作为函数的参数  -- 它传递的是数组的首地址,所以要把长度一起进行传递

void Fun1(int num[],int l);
int main()
{
    int num[5] = {1,2,3,4,5};
    Fun1(num,5);
    return 0;
}
void Fun1(int num[],int l)
{
    for(int i = 0;i

        指针作为函数的参数

void Fun1(int *a,int *b);
int main()
{
    int a = 14,b = 17;
    Fun1(&a,7b);
    printf("%d\t%d\n",a,b);
    return 0;
}
void Fun1(int *a,int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

        8.函数与返回值相关的应用

        基本数据类型作为函数的返回值

int Fun1(int a,int b);
int main()
{
    int a = 5,b = 10;
    printf("%d\n",Fun1(a,b));
    return 0;
}
int Fun1(int a,int b)
{
    int c = a + b;
    return c;
}

        数组作为函数的返回值  -- 实际返回的是数组的首地址

char * Fun();
int main()
{
    printf("%s/n",fun());
    return 0;
}
char *fun()
{
    static char ch[1024] = "hello";
    return ch;
}

        指针作为函数的返回值 -- 本质就是一个指针函数

char * Fun();
int main()
{
    printf("%s/n",fun());
    return 0;
}
char *fun()
{
    static char ch[1024] = "hello";
    return ch;
}

        9.指针函数和函数指针

          指针函数 -- 返回值类型是指针的函数 -- 是一个函数

          定义: 类型 *函数名(形参){};

          函数指针 -- 函数类型的指针 -- 是一个指针

          定义: 类型 (*标识符)(形参) = 初始值;

          应用: 使用指针名代替函数名进行函数调用 -- Fun(); -- p();

void Fun();
int main()
{
    //定义函数指针
    void (*p)(void) = fun;
    //调用函数
    p();
    return 0;
}
void fun(void)
{
    printf("函数指针.....\n");
}

        函数指针数组 -- 函数指针类型的数组它的数组元素是函数指针

        定义:类型 (*标识符[长度])(形参) = 初始值;

void fun();
void fun1();
void fun2();
int main()
{
    //定义函数指针
    void (*p[3])(void) = {fun,fun1,fun2};
    //调用函数
    for(int 1 = 0;i<3;i++)
    {
        p[i]();
    }
    return 0;
}
void fun(void)
{
    printf("函数指针.....\n");
}
void fun1(void)
{
    printf("函数指针.....\n");
}
void fun(void)
{
    printf2("函数指针.....\n");
}

        10.全局变量和局部变量

全局变量局部变量
定义位置{},一般main上边{}内
初始值具有默认值,一般为0随机数
生命周期整个程序中存活{}结束而结束
作用域整个程序中活动{}内活动

        可以重名因为他们定义位置不同

                重名后优先使用局部变量遵循就近原则

        11.关键字

extern -- 借用外部资源

        修饰函数或全局变量的声明,表示该全局变量或函数是引用外部文件的内 容 -- 需要可外部文件一块编译

        static 提高局部变量的声明周期,但是不提高其作用域。

        修饰全局变量或函数的定义,表示该全局变量或函数私有化,不允许外部 文件借用。

        12.C 语言五大区

        (1)栈区 -- 定义变量时使用,自动开辟,自动收回

        (2)堆区 -- 手动开辟,手动释放

        (3)全局区/静态区(static) -- 全局变量或 static 修饰的变量

        (4)常量区 -- 常量

        (5)代码区 -- 函数

posted @ 2025-12-04 21:04  yangykaifa  阅读(0)  评论(0)    收藏  举报