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;
}
如何解释这些?
答案 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;
我会说很清楚他们应该是一样的。