• C语言 数组作为函数参数


    1、数组元素作为函数实参
    int a[10];  //相当于定义了10个变量,a[0]~a[9],那么数组元素就是:a[0]~a[9],数组元素就可以当成变量使用。
    #include
    1. //函数声明
    2. int whichmax(int x,int y);
    3. int main()
    4. {
    5.     int a[10];
    6.     a[1]=5;
    7.     a[4]=7;
    8.     int tmpmax=whichmax(a[1],a[4]);  //将数组元素当成变量使用,来作为函数调用的实参,依旧是值传递
    9.     printf("tmpmax=%d\n",tmpmax);
    10.     return 0;
    11. }
    12. //函数定义
    13. int whichmax(int x,int y//这里的x,y,在函数调用的时候,系统会自动给他们分配内存,在函数调用完毕之后,内存会回收。
    14. {
    15.     if(x>y)
    16.         return x;
    17.     return y;
    18. }

    2、数组名作为函数实参
    实参和形参个数要相等,类型要一致,按顺序对应,一一传递。
    C语言规定,实参变量对形参变量的数据传递是“值传递”,就是单向传递,只能由实参传递给形参,不能由形参传递给实参。
    此外,数组名也可以作为函数实参,数组名代表的是数组首地址,当将数组名作为函数的实参时,传递的是数组的首地址。
    此时,函数中的形参也应该用数组名字(也可以是数组指针)。
    强调:数组名作为函数参数时, 不是"值传递(值传递:形参是会分配内存的)"的概念, 不是单向传递,而是把 实参数组的 开始地址 传递给了 形参数组(不分配内存,直接使用实参的内存地址)。
    这样两个数组就会 共同占用一段内存,其实叫 地址传递,也就是说,形参数组中各个元素的值如果发生了变化,会导致实参数组元素的值也发生相应改变,这就是与变量做函数参数明显不同的。
    1. #include
    2. //函数定义在前面,就可以不用声明
    3. void changevalue(int ba[5]//这里 可以是ba[5],也可以是ba[] 形参数组的大小可以不指定,即使指定了也可以与实参数组大小不一                                 致,因为C编译器对形参数组的大小不做检查,只是将实参数组的首地址传递给形参数组。
    4.                               //如果是 ba[9] 这里系统是没有分配内存的,ba[5]不属于a[5],非要往这里写入内容,很可能会导致崩                                   溃;因为a[5]传过来只有a[0]-a[4] 这五个内存地址,系统并没有分配9个内存地址
    5. {
    6.     ba[3]=27;   //这就是给内存赋值,所以这个值会带回给调用者
    7.     ba[4]=45;
    8.     return;
    9. }
    10. int main()
    11. {
    12.     int a[5];  //能引用的是a[0]--a[4]
    13.     a[0]=85;
    14.     a[1]=70;
    15.     a[2]=98;
    16.     a[3]=92;
    17.     a[4]=78;
    18.     changevalue(a);   //使用数组名作为实参
    19.     for(int i=0;i<5;i++)
    20.     {
    21.         printf("a[%d]=%d\n",i,a[i]);
    22.     }
    23.     return 0;
    24. }

                  把实参数组的开始地址传递给了形参数组(不分配内存,直接使用实参的内存地址) 这样两个数组就会共同占用一段内存,其实叫地址传递
    说明:
    1、如果实参为数组名,则形参也为数组名;
    2、形参数组与实参数组类型要一致,比如:都为int型,否则会出现意想不到的错误。
    3、形参数组的大小可以不指定,即使指定了也可以与实参数组大小不一致,因为C编译器对形参数组的大小不做检查,只是将实参数组的首地址传递给形参数组。
    3、用多维数组作为函数实参
    可以用多维数组名作为形参和实参,形参数组在定义时,可以指定每一维的大小,也可以忽略第一维大小,但不能省略第二维大小。
    实参是这些行这些列,形参就尽量跟实参一样(也是这些行,这些列),这样实参能引用的下标和形参一样可以引用,就会保证你不出错。
    1. #include
    2. //函数定义在前面,就可以不用声明
    3. void changevalue(int b[5][8])   //这里 5可以省略,但是 8不可以省略
    4. {
    5.     b[0][2]=15;  //实参里面能引用的下标,形参里面也可以引用
    6.     
    7.     return;
    8. }
    9. int main()
    10. {
    11.     int a[5][8];  //能引用的是a[0]--a[4]
    12.     a[0][2]=3;
    13.     changevalue(a);   //使用数组名作为实参
    14.     printf("a[0][2]=%d\n",a[0][2]);
    15.     return 0;
    16. }

  • 相关阅读:
    python停车场车位短租系统django+vue项目源码介绍
    shell命令以及运行原理
    JAVA重写与多态
    Mac OS 使用ScreenCaptureKit进行窗口抓取和系统声音抓取
    GitLab 知识树(三):gitlab指定版本安装
    antd框架——实现自定义菜单功能——技能提升
    CMT2380F32模块开发18-模拟电压比较器例程
    Cython加密python代码防止反编译
    异步FIFO
    Spring Boot + vue-element 开发个人博客项目实战教程(二十五、项目完善及扩展(前端部分))
  • 原文地址:https://blog.csdn.net/qq_48516121/article/details/127039899