C ++:为什么基指针和派生指针指向vs2013中的相同地址?

时间:2015-08-30 05:14:56

标签: c++ visual-studio-2013

class A{
    int a;
};
class B : public  A{
    int b;
};
class C : public  B{
    int c;
};

int _tmain(int argc, _TCHAR* argv[]){
    C c;
    C* pc = &c;
    B* pb = &c;
    A* pa = &c;
    printf("%d\n", pc); //4344
    printf("%d\n", pb); //4344
    printf("%d\n", pa); //4344
    return 0;
}

所有(pa,pb,pc)指向相同的地址" 4344" ,他们是否假设不同?

------------- ------------- UPDATE
如果它们被假设为相同,那么当我将代码更改为此时,pa将指向不同的地址:

class A{
    int a;
};
class B {
    int b;
};
class C : public  B , public A{
    int c;
};

int _tmain(int argc, _TCHAR* argv[]){
    C c;
    C* pc = &c;
    B* pb = &c;
    A* pa = &c;
    printf("%p\n", pc); //4344
    printf("%p\n", pb); //4344
    printf("%p\n", pa); //4348
    return 0;
}

如何解释这些?

2 个答案:

答案 0 :(得分:1)

不,他们指向同一个对象,即c。因此,您将拥有相同的地址。并且您不应该将地址打印为%d但%p。 https://10hash.com/c/stdio/#fprintf甚至更好http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html

答案 1 :(得分:0)

您正在将所有指针分配到同一地址:

C* pc = &c;
B* pb = &c;
A* pa = &c;

我会说很清楚他们应该是一样的。