C 结构型铸造

C 结构型铸造,c,types,C,Types,我有一个 structure { int a; char b; } st; 是否有办法对结构件st.a进行打字? 因为在少数地方我希望它是int,在少数地方我希望它是Char*你想要的东西被称为。我建议使用: 假设sizeof(int)==sizeof(char*)保持不变,您可以使用st.u.a或st.u.ptr访问内存中的相同值 对于它的价值,考虑使用 SiZeZt而不是 int >代码>作为 A/字段的类型。这样,您的代码在64位版本中仍然是正确的(其中,int可能仍然是

我有一个

structure {
    int a;
    char b;
} st;
是否有办法对结构件
st.a
进行打字? 因为在少数地方我希望它是
int
,在少数地方我希望它是
Char*
你想要的东西被称为。

我建议使用:

假设
sizeof(int)==sizeof(char*)
保持不变,您可以使用
st.u.a
st.u.ptr
访问内存中的相同值


对于它的价值,考虑使用<代码> SiZeZt而不是<代码> int >代码>作为<代码> A/<代码>字段的类型。这样,您的代码在64位版本中仍然是正确的(其中,

int
可能仍然是32位,但指针是64位)。

在这种情况下,它们不应该是两个不同的结构吗?在发布任何代码或与代码相关的关键字之前,请使用花括号显示的代码部分。注意:在大多数64位平台上,您可能会遇到,
int
不够大,无法容纳
char*
或任何其他指针类型,因此,使用同一个字段来保存这两种类型的值可能不会很好。你的意思是要将整数解释为字符指针吗?将其更改为
C
,因为OP拒绝了一个只有C++的答案。@Jonathan:谢谢你澄清这一点;我修复了代码示例。值得一提的是,MicrosoftVisualStudio2008(我现在可以访问的编译器)也乐于接受C代码中的匿名联合。
struct {
  union {
    int a;
    char *ptr;
  } u;
  char b;
} st;