gpt4 book ai didi

c++ - 指针值不同,但它们比较相等。为什么?

转载 作者:IT老高 更新时间:2023-10-28 12:08:16 25 4
gpt4 key购买 nike

一个简短的例子输出了一个奇怪的结果!

#include <iostream>

using namespace std;

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

int main()
{
C* c = new C;
B* b = c;

cout << "The address of b is 0x" << hex << b << endl;
cout << "The address of c is 0x" << hex << c << endl;

if (b == c)
{
cout << "b is equal to c" << endl;
}
else
{
cout << "b is not equal to c" << endl;
}
}

让我很吃惊的是输出应该如下:

The address of b is 0x003E9A9C
The address of c is 0x003E9A98
b is equal to c

让我好奇的是:

0x003E9A9C不等于0x003E9A98,但是输出是“b等于c”

最佳答案

一个 C 对象包含两个子对象,类型为 AB。显然,它们必须具有不同的地址,因为两个单独的对象不能具有相同的地址;所以最多其中一个可以与 C 对象具有相同的地址。这就是打印指针给出不同值的原因。

比较指针并不是简单地比较它们的数值。只能比较相同类型的指针,因此必须转换第一个以匹配另一个。在这种情况下,c 被转换为 B*。这与最初用于初始化 b 的转换完全相同:它调整指针值,使其指向 B 子对象而不是 C 对象,两个指针现在比较相等。

关于c++ - 指针值不同,但它们比较相等。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18272909/

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