c/c++ 参数传递

 对于函数参数中的数组类型:传递的是数组地址,可以理解成传递的是对数组的引用。不是值传递,这是由C/C++函数实现机制决定的。
一下三种函数生命完全等价:
  void func(int array[10])
  void func(int array[])
  void func(int *array)

测试代码如下:

struct node{
    int val;
};

void func0(node n){
    n.val =  1000;
}

void func1(node n[2]){
    n[0].val = 1111;
}

void func2(int a[2])
{
    int t = a[0];
    a[0] = a[1];
    a[1] = t;
}

    node n0;n0.val = 0;
    func0(n0);
    cout<<n0.val<<endl;//nothing changed

    node n[2];
    n[0].val = 0;
    n[1].val = 0;
    func1(n);
    cout<<n[0].val<<endl;//changed
int a[2]; a[0] = 0;a[1] = 1; func2(a); cout<<a[0]<<" "<<a[1]<<endl;//changed

结果发现:不论是结构体数组,还是整形数组,只要是数组,就是引用传递。并且会造成值的修改。

原文地址:https://www.cnblogs.com/luntai/p/5492334.html