C++ 函數形參發生動態綁定時指針增加步長與靜態類型一致

牛客網上的題: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

相關文章
相關標籤/搜索