1.数组元素作函数参数

    • 数组元素作函数实参,用法与一般变量作实参相同,是“值传递”。
    • 例:有两个数据系列为:

    int a[8]={26,1007,956,705,574,371,416,517};
    int b[8]={994,631,772,201,262,763,1000,781};
    求第三个数据系列c,要求c中的数据是a、b中对应数的最大公约数。

    1. int gys(int m,int n)
    2. {
    3. int r;
    4. if(m<n) { r=m; m=n; n=r; }
    5. while(r=m%n) { m=n; n=r; }
    6. return n; }
    7. void main(void)
    8. { int a[8]={26,1007,956,705,574,371,416,517};
    9. int b[8]={994,631,772,201,262,763,1000,781};
    10. int c[8];
    11. for(int i=0;i<8;i++)
    12. c[i]=gys(a[i],b[i]); //求对应元素的公约数
    13. for(i=0;i<8;i++)
    14. cout<<c[i]<<'\t';
    15. cout<<endl;
    16. }

    2.用数组名作函数参数

    • 在C++中,数组名被认为是数组在内存中存放的首地址。
    • 用数组名作函数参数,实参与形参都应该用数组名。
    • 函数传递的是数组在内存中的地址。
    • 实参中的数据地址传到形参中,实参形参共用同一段内存。
    • 例:

      1. void fun(int a[2])
      2. { for(int i=0;i<2;i++)
      3. a[i]=a[i]*a[i];
      4. }
      5. void main(void)
      6. { int b[2]={2,4};
      7. cout<<b[0]<<‘\t’<<b[1]<<endl;
      8. fun(b);
      9. cout<<b[0]<<‘\t’<<b[1]<<endl;
      10. }
      • 输出: 2 4

    4 16

    • 解析:数组b和数组a占据同一段内存;a同样为数组首地址,也是2000H。

      1. ![批注 2020-08-11 095912.png](https://cdn.nlark.com/yuque/0/2020/png/2314091/1597119394892-0e6bff37-5797-483d-af49-b81b0e4ab38e.png#align=left&display=inline&height=142&margin=%5Bobject%20Object%5D&name=%E6%89%B9%E6%B3%A8%202020-08-11%20095912.png&originHeight=142&originWidth=282&size=35052&status=done&style=none&width=282)
    • 注意:

      1. 用数组名作函数参数,应在主调函数和被调函数中分别定义数组,且类型一致。
      2. 需指定实参数组大小,形参数组的大小可不指定。数组名作实参实际上是传递数组的首地址。
      3. 数组名代表数组在内存中存储的首地址。数组名作函数实参实际上传递的是数组在内存中的首地址。实参和形参共占一段内存单元,形参数组中的值发生变化妈耶相当与实参数组中的值发生变化。

    批注 2020-08-11 095912.png