Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带指针的向量推回操作_C++ - Fatal编程技术网

C++ 带指针的向量推回操作

C++ 带指针的向量推回操作,c++,C++,我试图使用一个向量指针,并试图推回一个值。看来这个手术需要圆括号。为什么需要圆括号 void foo(vector<int> *v1) { *v1.push_back(1); //(*v1).push_back(1); } int main() { vector<int> A; foo(&A); return 0; } 运算符优先级 成员访问.push_back的优先级高于间接/取消引用*v1,因此*v1.push_back1相当于*v1.push_back

我试图使用一个向量指针,并试图推回一个值。看来这个手术需要圆括号。为什么需要圆括号

void foo(vector<int> *v1)
{
*v1.push_back(1); //(*v1).push_back(1); 
}

int main()
{
vector<int> A;
foo(&A);
return 0;
}
运算符优先级

成员访问.push_back的优先级高于间接/取消引用*v1,因此*v1.push_back1相当于*v1.push_back1。这不是你想要的

*v1中的括号从左到右赋予表达式比成员访问更高的优先级,因此它有效且等价于->


v1->是*v1的语法糖


假设您有以下示例:

int a[] = {100, 70, 55, 12};
int* pA = &a[0];

*pA++; // you think 100 + 1 but a[0 + 1] so result: 70
在上面,在递增pA所指向的地址而不是其所指向的地址中存储的值后,您取消了对pA的引用

因此,您需要:

提示:要更改运算符优先级,请使用括号。
首先,您需要取消对向量指针的引用,以便能够调用其成员函数,因此语法如下:

(*v1).push_back(1);
使用箭头->运算符也可以实现同样的效果:

v1->push_back(1);
或者,通过引用传递参数:

void foo(vector<int>& v1) {
    v1.push_back(1);
}

int main() {
    vector<int> A;
    foo(A);
}

因为操作符就是这样绑定的。您也可以使用->。或者在引用有效时避免使用指针,效果更好。void foovector&v1更好。用fooA来称呼它;行为与所有其他指针相同。v1->是*v1的语法糖。-或者正面。这两个似乎都不是特别甜。”\_ツ_/''我只是个信使。@JiveDadson v1->有什么不甜的地方吗?v1是一个指针,->看起来像一个指向的箭头。它是指针一直使用的运算符,对大多数程序员来说应该是很自然的。
void foo(vector<int>& v1) {
    v1.push_back(1);
}

int main() {
    vector<int> A;
    foo(A);
}