在我的代码中,我只使用格式字符串打印相同的对象.但是,结果并不相同.根据我的见解,我认为结果应该是97 97 97,但结果是97 98 99.
输出怎么了?我实际上并不了解发生了什么.你能解释一下吗?
class A {
public:
int a, b, c;
A() {
this->a = 97;
this->b = 98;
this->c = 99;
};
};
int main(int argc, char **argv) {
A a;
printf("%d %d %d\n", a, a, a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
a是一个类型的对象A,而不是一个整数,这是%d需要的.这会导致未定义的行为,这意味着任何事情都会发生.在这种情况下,似乎正在发生的事情是a格式字符串后面的一个s占据堆栈上的三个int参数将占用的相同位置,因此其数据成员(a,b和c)是三个%d最终的结果使用.
要打印A::a三次存储的值97 ,您应该这样做:
printf("%d %d %d\n", a.a, a.a, a.a);
Run Code Online (Sandbox Code Playgroud)