使用指针和联合
Using pointers and union
本文关键字:指针 更新时间:2023-10-16
我刚刚开始学习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: %xn"
"uniao.f: %xn"
"uniao.c: %xn",
&uniao.i, &uniao.f,&uniao.c);
test(&uniao);
}
void test(union Uniao *uniao){
printf("uniao.i: %xn"
"uniao.f: %xn"
"uniao.c: %xn",
uniao->i, uniao->f,uniao->c);
}
据我了解,指针指向原始变量的内存位置。因此,使用指针的输出应与使用原始变量的输出相同。但我的输出是这样的:
uniao.i: bfeac1dc
uniao.f: bfeac1dc
uniao.c: bfeac1dc
uniao.i: b77abff4
uniao.f: 80000000
uniao.c: beef57fe
我的指针有问题还是我误解了?
在第一种情况下,您正在打印工会每个成员的地址。作为工会的成员,他们都有相同的地址。在函数内部,您将打印成员的值。(具有不同的类型,在这里会产生奇怪的结果。在第二次 printf 调用中的每个 unaio 之前添加&
将给你预期的结果。
main()
格式化工会成员的内存地址,而test()
则格式化成员的值。
在 main 的第一个 printf 语句中,您使用"&"返回每个成员的地址(对于一个联合来说,所有成员都应该相同),但在"Test"函数中,您传递每个联合成员的值而不是地址 - 即没有"&"。这就是您获得不同输出值的原因。
在编译器上打开警告,以便它告诉您它对代码的看法。它应该找到大约六个左右的坏错误。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错