使用格式字符串打印类

cra*_*udy -2 c++ oop

在我的代码中,我只使用格式字符串打印相同的对象.但是,结果并不相同.根据我的见解,我认为结果应该是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)

Mar*_*tos 7

a是一个类型的对象A,而不是一个整数,这是%d需要的.这会导致未定义的行为,这意味着任何事情都会发生.在这种情况下,似乎正在发生的事情是a格式字符串后面的一个s占据堆栈上的三个int参数将占用的相同位置,因此其数据成员(a,bc)是三个%d最终的结果使用.

要打印A::a三次存储的值97 ,您应该这样做:

printf("%d %d %d\n", a.a, a.a, a.a);
Run Code Online (Sandbox Code Playgroud)