C++数组与vector的指针作为函数参数的差异

array的指针作为函数参数

首先定义一个数组

    int a[3] = {1,2,3};

接着定义函数ReAssign,它的作用是对数组重新赋值,由原来的a[i]=i+1重新赋值为a[i]=i2,这里传递的是数组的首地址,而在使用该数组时正常使用就行

void ReAssign(int *a){
    for(int i=0;i<3;i++){
        a[i] = i*i;
    }
}

vector的指针作为函数参数

但是对于vector类型同样的操作无法通过编译,
在这里插入图片描述
只有改成(b)的方式才能对vector的成员进行操作,但是对数组用a的方式进行引用编译是无法通过的

void ReAssignVector(vector<int > *b){
    for(int i=0;i<3;i++){
        (*b)[i] = i*i;
    }
}

猜测是c++编译器对数组的引用做了特殊处理,对于数组a既是变量名又是地址即a[i]与&a+i是完全等价的,而对于vector在函数里传递进去的是地址,无法直接引用其元素,只能*b然后再取元素


版权声明:本文为km719340776原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。