Skip to content

Latest commit

 

History

History
107 lines (80 loc) · 3.04 KB

20.数组和函数.md

File metadata and controls

107 lines (80 loc) · 3.04 KB

数组和函数

  • 数组可以作为函数的参数使用,数组用作函数参数有两种形式:
    • 一种是把数组元素作为实参使用
    • 一种是把数组名作为函数的形参和实参使用

数组元素作为函数参数

  • 数组的元素作为函数实参,与同类型的简单变量作为实参一样,如果是基本数据类型, 那么形参的改变不影响实参
voidchange(intval)// int val = number { val=55; } intmain(intargc, constchar*argv[]) { intages[3] = {1, 5, 8}; printf("ages[0] = %d", ages[0]);// 1change(ages[0]); printf("ages[0] = %d", ages[0]);// 1 }
  • 用数组元素作函数参数不要求形参也必须是数组元素

数组名作为函数参数

  • 在C语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址,因此,当数组名作函数参数时,实参与形参之间不是"值传递",而是"地址传递"
  • 实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元, 系统不再为形参数组分配存储单元
  • 既然两个数组共享一段内存单元, 所以形参数组修改时,实参数组也同时被修改了
voidchange2(intarray[3])// int array = 0ffd1 { array[0] =88; } intmain(intargc, constchar*argv[]) { intages[3] = {1, 5, 8}; printf("ages[0] = %d", ages[0]);// 1change(ages); printf("ages[0] = %d", ages[0]);// 88 }

数组名作函数参数的注意点

  • 在函数形参表中,允许不给出形参数组的长度
voidchange(intarray[]) { array[0] =88; }
  • 形参数组和实参数组的类型必须一致,否则将引起错误。
voidprtArray(doublearray[3]) // 错误写法 { for (inti=0; i<3; i++) { printf("array[%d], %f", i, array[i]); } } intmain(intargc, constchar*argv[]) { intages[3] = {1, 5, 8}; prtArray(ages[0]); }
  • 当数组名作为函数参数时, 因为自动转换为了指针类型,所以在函数中无法动态计算除数组的元素个数
voidprintArray(intarray[]) { printf("printArray size = %lu\n", sizeof(array)); // 8intlength=sizeof(array)/ sizeof(int); // 2printf("length = %d", length); }
  • 练习:
    • 设计一个函数int arrayMax(int a[], int count)找出数组元素的最大值
    • 从键盘输入3个0-9的数字,然后输出0~9中哪些数字没有出现过
    • 要求从键盘输入6个0~9的数字,排序后输出

捐赠支持

项目的发展离不开你的支持,如果 CNote 帮助到你打开编程的大门,请作者喝杯咖啡吧 ☕ 后续我们会继续完善更新!加油!

点击捐赠支持作者

最后,如果有任何疑问,请加微信 leader_fengy 拉你进学习交流群。

开源不易,码字不易,如果觉得有价值,欢迎分享支持。

close