无法理解为什么*a++不起作用而*a=*a+1是?
为什么我使用*a++它时不影响我的答案并给我警告。但是它*a=*a+1在下面的代码中工作正常吗?
#include <bits/stdc++.h>
using namespace std;
void incrementptr(int* a)
{
//*a++;
*a=*a+1;
}
int main()
{
int a=10;
cout<<a<<endl;
// increment(a);
// cout<<a<<endl;
incrementptr(&a);
cout<<a<<endl;
return 0;
}
回答
运算符优先级:后缀的++优先级高于*,因此*a++被解析为*(a++)。它递增指针和取消引用a(递增之前的值)并且表达式的结果未使用。
我想这只是为了练习指针,但您的代码中不应该有任何指针。仅当 anullptr是函数的有效输入时才使用指针作为参数。否则传递一个引用(当你不需要增量前的值时使用 preincrement ,它不会对 an 产生影响int,但通常 post 可能比 pre 更昂贵):
void increment(int& a) { ++a; }