牛客網上的題:spa
class A { public: long a; }; class B : public A { public: long b; }; void seta1(A* data, int idx) { data[idx].a = 2; } void seta2(A* data, int idx) { data[idx].a = 2; } int main() { B data[4]; for (int i = 0; i<4; ++i) { data[i].a = 1; data[i].b = 1; seta1(data, i); //輸出22221111 //seta2(data, i); //輸出21212121 } for (int i = 0; i<4; ++i) { std::cout << data[i].a << data[i].b; } return 0; }
這個題中,A的大小爲4,B的大小爲8,seta1的形參是A類型指針,seta2的形參是B類型指針指針
因此seta1內部的步長增加是4,seta2內部的步長增加是8,當seta1和seta2的實參是B類型時在賦值時發生:code
因此:blog
seta1的輸出是22221111class
seta2的輸出是21212121im