有人可以解释联合如何在这行代码中工作以及如何交换数字吗?
Can someone explain how the union works in this line of code and how the numbers are being swaped?
#include<iostream>
using namespace std;
union swap_byte { //This code is for union
public:
void swap();
void show_byte();
void set_byte(unsigned short x);
unsigned char c[2];
unsigned short s;
};
void swap_byte::swap() //swaping the declared char c[2]
{
unsigned char t;
t = c[1];
c[1] = c[0];
c[0] = t;
}
void swap_byte::show_byte()
{
cout << s << "\n";
}
void swap_byte::set_byte(unsigned short x) //input for the byte
{
s = x;
}
int main()
{
swap_byte b;
b.set_byte(49034);
b.show_byte();
b.swap();
b.show_byte();
cin.get();
return 0;
}
我无法理解 union 的用途,我通过上面的代码看到了 union 的实现,但感到困惑,请解释代码的作用以及 union 的工作原理。
union
是一种特殊的结构,其中成员重叠,因此 swap_byte
的布局类似于:
| | | char c[2]
-------------
| | short s
但这发生在相同的 2 个内存字节中。这就是为什么交换 c
的单个字节会产生交换 short
数字中最相关和最不相关的字节的效果。
请注意,这可能很脆弱,而且这不是最好的方法,因为您必须确保多个方面。此外,默认情况下,访问与最后一组不同的联合字段会在 C++ 中产生未定义的行为(但在 C 中是允许的)。这是一个很少需要的老把戏。
#include<iostream>
using namespace std;
union swap_byte { //This code is for union
public:
void swap();
void show_byte();
void set_byte(unsigned short x);
unsigned char c[2];
unsigned short s;
};
void swap_byte::swap() //swaping the declared char c[2]
{
unsigned char t;
t = c[1];
c[1] = c[0];
c[0] = t;
}
void swap_byte::show_byte()
{
cout << s << "\n";
}
void swap_byte::set_byte(unsigned short x) //input for the byte
{
s = x;
}
int main()
{
swap_byte b;
b.set_byte(49034);
b.show_byte();
b.swap();
b.show_byte();
cin.get();
return 0;
}
我无法理解 union 的用途,我通过上面的代码看到了 union 的实现,但感到困惑,请解释代码的作用以及 union 的工作原理。
union
是一种特殊的结构,其中成员重叠,因此 swap_byte
的布局类似于:
| | | char c[2]
-------------
| | short s
但这发生在相同的 2 个内存字节中。这就是为什么交换 c
的单个字节会产生交换 short
数字中最相关和最不相关的字节的效果。
请注意,这可能很脆弱,而且这不是最好的方法,因为您必须确保多个方面。此外,默认情况下,访问与最后一组不同的联合字段会在 C++ 中产生未定义的行为(但在 C 中是允许的)。这是一个很少需要的老把戏。