gpt4 book ai didi

c++ - 使用指针和 union

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:50 28 4
gpt4 key购买 nike

我刚开始学C,我觉得我这里的指针做错了或者没理解它的意思。看这个:

#include <stdio.h>

union Uniao{
int i;
float f;
char c[4];
};
void test(union Uniao *uniao);
int main(){
union Uniao uniao;
printf("uniao.i: %x\n"
"uniao.f: %x\n"
"uniao.c: %x\n",
&uniao.i, &uniao.f,&uniao.c);
test(&uniao);
}
void test(union Uniao *uniao){
printf("uniao.i: %x\n"
"uniao.f: %x\n"
"uniao.c: %x\n",
uniao->i, uniao->f,uniao->c);
}

据我了解,指针指向原始变量的内存位置。所以使用指针的输出应该与使用原始变量的输出相同。但我的输出是这样的:

uniao.i: bfeac1dc
uniao.f: bfeac1dc
uniao.c: bfeac1dc
uniao.i: b77abff4
uniao.f: 80000000
uniao.c: beef57fe

是我的指针有问题还是我理解错了?

最佳答案

在第一种情况下,您要打印每个 union 成员的地址。作为 union 的成员,他们都有相同的地址。在函数内部,您正在打印成员的。 (其中,具有不同的类型,会在这里产生奇怪的结果。)在第二个 printf 调用中的每个 unaio 之前添加 & 会给你预期的结果。

关于c++ - 使用指针和 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22121198/

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