C语言基础_8

本文深入探讨了函数的定义、调用、传参方式,包括值传递和地址传递,并解析了一维和二维数组的传参机制。同时,详细介绍了指针函数、函数指针和函数指针数组的概念与应用,提供了丰富的示例代码。

一、函数
   函数是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值。
  1、形式
    数据类型 函数名(数据类型 形参1,数据类型 形参2, ... ,数据类型 形参n)
    {
        语句块;
        return [表达式];
    
    }
    
    说明:
    1> 数据类型是函数返回值的数据类型,即数据类型和return后的表达式的数据类型一致;
    2> 函数名符合合法的标识符;
    3> 形参的数据类型一定不能省略;
    4> {}及里边的语句块统称 函数体;
    5> {}中的语句可以是0条,也可以是一条,也可以是多条;
    6> return后边的表达式是函数最终的返回值,此返回值的数据类型要和函数名前数据类型保持一致;
    7> 如果函数名前的数据类型为void型,说明此函数没有返回值,return语句可以写(即 return;)也可以不写;
    
  eg:
  int main()
  {
  
  
    return 0;
  }
  
  2、函数调用
    函数名(实参1,实参2,...,实参n);
    
  3、函数传参
    形式:
    值传递
        本质:将实参空间的值拷贝一份到形参空间,形参的改变一定不会影响实参的值;
    地址传递
        本质:将实参的地址传给形参,通过形参一定可以修改到实参的值;
    全局变量
        本质:利用全局变量的作用域;
   4、函数声明
        数据类型 函数名(数据类型 形参1,数据类型 形参2, ... ,数据类型 形参n);
  
二、数组传参
    1、一维数组传参
        值传参
        eg:
            
            int *fun(int a[10], int len)
            {
                //int a[10]是数组形式,本质是指针,即sizeof(a)的值为4;

            }
            
            
            int main()
            {
                int a[10] = {1,2,3,4,5,6,7,8,9,10};
                int len = sizeof(a) / sizeof(a[0]);
                fun(a,len);
                return 0;
            
            }
        
        地址传参
        
        eg:
            
            int *fun(int *p, int len)
            {
                //int a[10]是数组形式,本质是指针,即sizeof(a)的值为4;

            }
            
            
            int main()
            {
                int a[10] = {1,2,3,4,5,6,7,8,9,10};
                int len = sizeof(a) / sizeof(a[0]);
                fun(a,len);
                return 0;
            
            }
  
    注意:
        一维数组的值传递和地址传递,本质都是地址传参;
  
    2、二维数组传参
    
        int fun(int (*p)[4],int len)
        {
        
        
        }
    
        int main()
        {
            int a[3][4];
            fun(a,3);
        
        }
  
 三、指针函数
    本质:是函数,只不过函数的返回值是指针;
    1、形式
    
    数据类型 *函数名(数据类型 形参1,...,数据类型 形参n)
    {
        语句块;
        return 地址值;
    }
    
    说明:
    其中
    <数据类型> 、<函数名称>、<形式参数说明>    等与一般函数定义相同;
    在<函数名称>之前的*符号,说明该函数返回   一个地址量。

    
    eg:
    char *strcpy(char *dest, const char *src);
四、函数指针
    本质:是指针,只不过指针指向一个函数
    
    函数指针是用来存放函数的地址,这个地址是一个函数的入口地址,而且是函数调用时使用的起始地址。
    
    1、形式
    
    数据类型 (*函数指针名)(数据类型 形参1, ..., 数据类型 形参2);
    
    注意:
    说明定义了一个函数指针,这个指针指向一个 返回值是int 型, 参数是 (数据类型 形参1, ..., 数据类型 形参2) 的一个函数;
    
    
    int add(int a, int d); //add函数的类型是 int (int a, int b)
    int (*p) (int a, int b) = add;
    
  其中
    <数据类型>是函数指针所指向的函数的返回值类型;
    <函数指针名称>符合标识符命名规则
    <参数说明列表>应该与函数指针所指向的函数的形参说明保持一致;
    (*<函数指针名称>)中,*说明为指针()不可缺省,表明为函数的指针。
    
五、函数指针数组
1、形式
    数据类型 (*数组名[元素个数])(数据类型 形参1,..., 数据类型 形参 n);
    eg:
    int add(int a, int b)   


    
    }
     
     
    int mul(int a, int b)
    {
    
    }    
     
     int (*a[2]) (int , int ) = {add, mul};
     a[0](10,20);或者 (*a)(10,20);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值