gpt4 book ai didi

C++: 为什么基指针和派生指针在 vs2013 中指向同一个地址?

转载 作者:行者123 更新时间:2023-11-30 05:39:35 24 4
gpt4 key购买 nike

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;
}

All(pa,pb,pc) 指向同一个地址 "4344",他们不应该是不同的吗?

------------更新------------
如果它们应该是相同的,那么当我将代码更改为此时,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;
}

如何解释这些?

最佳答案

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

关于C++: 为什么基指针和派生指针在 vs2013 中指向同一个地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32293405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com