#include <iostream>
using namespace std;
void reset(int *a, int *b){
int sum = *a + *b;
*a = (sum / 2.0 - sum / 2) >= 0.5 ? sum / 2 + 1 : sum / 2;
*b = *a;
cout << hex << (void *)a<<endl;
cout << hex << b<<endl;
}
int main(){
int a, b;
cin >> a >> b;
reset(&a, &b);
cout << a <<' '<< b << endl;
}
我使用代码重置两个变量,但是在打印变量指针后,数据发生了变化。当我推荐两个cout语句时。它有效。
看起来像这样:
答案 0 :(得分:5)
您应该返回dec
,因为您已将输出更改为hex
#include <iostream>
using namespace std;
void reset(int *a, int *b){
int sum = *a + *b;
*a = (sum / 2.0 - sum / 2) >= 0.5 ? sum / 2 + 1 : sum / 2;
*b = *a;
cout << hex; //set hex for output stream
cout << (void *)a<<endl;
cout << b<<endl;
cout << dec; // return to dec system
}
int main(){
int a, b;
cin >> a >> b;
reset(&a, &b);
cout << a <<' '<< b << endl;
}
答案 1 :(得分:1)
不修改变量,在此处使用std::hex后更改basefield
格式标志:
cout << hex << (void *)a << endl;
cout << hex << b << endl;
这就是为什么评论这个“修复”这个“问题”。
您可以取消注释此调用,但修改reset()
函数,以便恢复原始流状态:
void reset(int *a, int *b)
{
int sum = *a + *b;
*a = (sum / 2.0 - sum / 2) >= 0.5 ? sum / 2 + 1 : sum / 2;
*b = *a;
cout.setf(std::ios::hex); //Print as hexadecimal numbers
cout << (void *)a << endl;
cout << b << endl;
cout.setf(std::ios::dec); //Restore to decimal
}
我修改了您的重置只设置hex
一次,而不是每次打印时都<< hex
(尽管没有必要,因为,正如您所注意到的,流被永久修改 - 这就是为什么我更喜欢显式函数调用)。
进一步阅读:std::ios_base::setf。