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);
}