gpt4 book ai didi

c - 可以给彼此分配不同类型的指针吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:59 25 4
gpt4 key购买 nike

考虑到

T1 *p1;
T2 *p2;

我们能把p1赋给p2吗?反之亦然?如果是这样的话,我们可以不用石膏来做,还是必须用石膏?

最佳答案

T1T2类型不同时,T1 *p1T2 *p2之间的赋值被正式禁止,除非T1T2中至少有一个是void类型,另一个是对象(而不是函数)类型。
在许多情况下,不兼容的赋值在实践中会起作用,特别是在具有“扁平”地址空间的机器(例如今天所有流行的机器)上,并且所有指针类型共享相同的内部表示。
然而,在“混合模式”指针分配之后,由于(1)对齐问题和(2)strict aliasing,当指针被取消引用时,很可能会出现问题。
由于“混合模式”指针分配在形式上是非法的,而且通常是一个坏主意,所以大多数编译器都会对它们发出警告。大多数编译器允许使用显式强制转换来抑制警告。大多数情况下,强制转换仅用于抑制警告;它不会引入任何实际的转换,而这些转换无论如何都不会执行。(也就是说,将p1 = p2更改为p1 = (T1 *)p2非常类似于将i = f更改为i = (int)f,其中i是int,f是float。)
补遗:我写了“当T1T2类型不同时”,但更精确的说法是当它们不兼容时。例如,类型charunsigned char是兼容的,因此可以在这些类型的指针之间进行赋值。更多详细信息,请参见Eric Postpischil的较长答案。

关于c - 可以给彼此分配不同类型的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52407576/

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