如果指针的递增方式不同,为什么这段代码会有不同的输出 C++
Why does this code have different outputs if pointers are incremented differently c++
#include <iostream>
using namespace std;
int main() {
int num=10;
int *ptr=NULL;
ptr=#
num=(*ptr)++; //it should increase to 11
num=(*ptr)++; //it should increase to 12 but im getting 10
//if i dont initialize num and just use (*ptr)++ it gives me 11
cout<<num<<endl;
return 0;
}
我想知道为什么会这样,为什么我得到 10 作为输出。
(*ptr)++
将 num
增加到 11,但 returns 其先前的值 (10),因为 ++
是后缀。
所以对于 num = (*ptr)++
,您暂时将 num
增加到 11,但随后(重新)分配给它 10。
why is this happening
因为你使用的是post-increment operator而不是pre-increment operator.
将(*ptr)++
替换为:
num = ++(*ptr);//uses pre-increment operator
你会在程序结束时得到 12 作为输出,可以看到 here。
备选方案
你也可以只写(*ptr)++;
而不赋值给num
。所以在这种情况下代码看起来像:
int main() {
int num=10;
int *ptr=NULL;
ptr=#
(*ptr)++; //no need for assignment to num
(*ptr)++; //no need for assignment to num
cout<<num<<endl;
return 0;
}
是给num赋值造成的。 ++ 运算符 returns 旧值然后递增。但是,然后将旧值分配给 num.
#include <iostream>
using namespace std;
int main() {
int num=10;
int *ptr=NULL;
ptr=#
num=(*ptr)++; //it should increase to 11
num=(*ptr)++; //it should increase to 12 but im getting 10
//if i dont initialize num and just use (*ptr)++ it gives me 11
cout<<num<<endl;
return 0;
}
我想知道为什么会这样,为什么我得到 10 作为输出。
(*ptr)++
将 num
增加到 11,但 returns 其先前的值 (10),因为 ++
是后缀。
所以对于 num = (*ptr)++
,您暂时将 num
增加到 11,但随后(重新)分配给它 10。
why is this happening
因为你使用的是post-increment operator而不是pre-increment operator.
将(*ptr)++
替换为:
num = ++(*ptr);//uses pre-increment operator
你会在程序结束时得到 12 作为输出,可以看到 here。
备选方案
你也可以只写(*ptr)++;
而不赋值给num
。所以在这种情况下代码看起来像:
int main() {
int num=10;
int *ptr=NULL;
ptr=#
(*ptr)++; //no need for assignment to num
(*ptr)++; //no need for assignment to num
cout<<num<<endl;
return 0;
}
是给num赋值造成的。 ++ 运算符 returns 旧值然后递增。但是,然后将旧值分配给 num.