C for ios --- 数组元素作为函数参数

数组元素作为函数参数


  • 数组可以作为函数的参数使用,进行数据传送。数组用作函数参数有两种形式:
    • 一种是把数组元素(下标变量)作为实参使用
    • 一种是把数组名作为函数的形参和实参使用

1.数组元素作为函数参数

  • 数组元素就是下标变量,它与普通变量并无区别。 因此它作为函数实参使用与普通变量是完全相
    同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。

  • 数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,形参的改变不影响实参

~~ void change(int val)// int val = number
~~ {
~~     val = 55;
~~ }
~~ int main(int argc, const char * argv[])
~~ {
~~     int ages[3] = {1, 5, 8};
~~     printf("ages[0] = %d", ages[0]);// 1
~~     change(ages[0]);
~~     printf("ages[0] = %d", ages[0]);// 1
~~ }
  • 用数组元素作函数参数不要求形参也必须是数组元素

2.数组名作为函数参数

  • 在C语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址, 因此,当数组名作函数参数时,实参与形参之间不是”值传递”,而是”地址传递”,实参数组名将 该数组的起始地址传递给形参数组,两个数组共享一段内存单元,编译系统不再为形参数组分配 存储单元。
  • 数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全等同,是存放在同一存储空间的同一个数组。这样形参数组修改时,实参数组也同时被修改了。形参数组的元素个数可以省略
  • 如果形参是基本数据类型,修改形参的值不会影响实参,如果形参是数组,修改形参的值会影响实参。
  • 数组作为形参会自动转换为指针,指针占用8个字节,当数组作为形参时形参转换为指针,所以指针永远为8个字节
~~ void change2(int array[3])// int array = 0ffd1
~~ {
~~     array[0] = 88;
~~ }
~~ int main(int argc, const char * argv[])
~~ {
~~     int ages[3] = {1, 5, 8};
~~     printf("ages[0] = %d", ages[0]);// 1
~~     change(ages[0]);
~~     printf("ages[0] = %d", ages[0]);// 88
~~ }

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

  • 在函数形参表中,允许不给出形参数组的长度
~~ void change2(int array[])
~~ {
~~     array[0] = 88;
~~ }
  • 形参数组和实参数组的类型必须一致,否则将引起错误。
~~ void prtArray(double array[3]) // 错误写法
~~ {
~~     for (int i = 0; i < 3; i++) {
~~         printf("array[%d], %f", i, array[i]);
~~     }
~~ }
~~ int main(int argc, const char * argv[])
~~ {
~~     int ages[3] = {1, 5, 8};
~~     prtArray(ages[0]);
~~ }
  • 当数组名作为函数参数时, 因为自动转换为了指针类型,所以在函数中无法动态计算除数组的元素个数
~~ void printArray(int array[])
~~ {
~~     printf("printArray size = %lu\n", sizeof(array)); // 8
~~     int length = sizeof(array)/ sizeof(int); // 2
~~     printf("length = %d", length);
~~ }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值