指针到指针的类型转换

时间:2020-03-03 06:48:21

标签: c++ pointers casting

我具有以下要素。

p1:指向类联合的指针。

r1在类联合中的指向区域类的指针。

A.x在Rectangle类中的一个点。

Union和Rectangle是基类Region的派生类。

我正在执行以下操作。

auto p1 = new Union();
p1->r1 = new Rectangle();

现在我想在r1内更改一个点。

如何在指针内转换指针,例如,我尝试了此操作,但它不起作用。

p1->(Rectangle*)r1->B.x = 6;

然而,这很完美,

auto r11 = (Rectangle*)p1->r1;
r11->A.x = 1;

如何在不创建新指针的情况下将p1->(Rectangle*)r1->B.x = 6;更改为直接更改A.x?

1 个答案:

答案 0 :(得分:3)

您需要签出运算符优先级及其关联性。 https://en.cppreference.com/w/cpp/language/operator_precedence

正确的格式是:

((Rectangle*)p1->r1)->B.x = 6;

更确切地说,这是它的工作方式:

  1. 带->(从左到右)的访问矩形*成员r1
  2. 将其投射到矩形*(从右到左)
  3. 访问B成员(从左到右)。考虑到->优先于强制转换(Rectangle*),这就是为什么我们在((Rectangle*)p1->r1)中加上括号的原因。
  4. 通过访问x成员。运营商