可能重复:
C中的联合
我在接受采访时被要求提供一个关于工会的真实例子.我建议他的工会可以用于低级系统编程.他让我举一个相关的例子.我告诉过我们可以使用union找到机器的字节顺序,但他似乎根本没有留下深刻的印象.我的意思是我可以建议他将工会与现实生活联系起来?
谢谢.
如果我有 4 个字节的内存并且希望以 unsigned long L和 char c[4]的形式访问该内存。在 C 中执行此操作最有效的方法是什么?
例如,如果我将L设置为 300,则字节将设置为0x0000012c,如果我访问c[3]我希望看到0x2c
如果我将c[3]加一,它就会变成0x2d,L现在的值为 301
谢谢
我想使用 RGBA 值表示 32 位数字,使用联合生成该数字的值是否可移植?考虑这个 C 代码;
union pixel {
uint32_t value;
uint8_t RGBA[4];
};
Run Code Online (Sandbox Code Playgroud)
这编译得很好,并且我喜欢使用它而不是一堆函数。但这安全吗?
变量a由值10指定,变量b由20指定为union变量v.然后它给出a的输出是20而不是10.我没有得到它.
#include<stdio.h>
int main()
{
union var
{
int a, b;
};
union var v;
v.a=10;
v.b=20;
printf("%d\n", v.a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我执行了程序,输出为20.
我正在尝试实现一个协议标准,我对它们的条件字段概念有点麻烦.根据某些条件,它们被定义为存在或不存在的字段.他们给出的例子如下:
uint16 Pressure;
enum VehicleType { car = 0, motorbike = 1};
struct TirePressureInfo {
VehicleType type;
select (type)
{
case car:
Pressure frontLeft;
Pressure frontRight;
Pressure rearLeft;
Pressure rearRight;
case motorbike:
Pressure front;
Pressure rear;
}
}
Run Code Online (Sandbox Code Playgroud)
无论如何我都没有意识到要在C中完成这项工作,或者甚至可能.无论如何,我无法想到实现这一点.有一点需要注意的是,这将在Linux内核模块中实现,所以我也有一些限制.
struct {
uint8 protocol_version;
ContentType type;
select (type) {
case unsecured :
opaque data<var>;
case signed, signed_partial_payload,
signed_external_payload:
SignedData signed_data;
case signed_wsa:
SignedWsa signed_wsa;
case encrypted :
EncryptedData encrypted_data;
case crl_request :
CrlRequest crl_request;
case crl :
Crl crl;
case other_value: …Run Code Online (Sandbox Code Playgroud) 嘿,我在此C代码上有一个作业问题:
#include<stdio.h>
typedef union{
char var1;
int var2;
float var3;
}data;
int main()
{
data mydata;
mydata.var1 = 'B';
mydata.var2 = 12;
if(mydata.var1 == 'B')
mydata.var3 = 3.5;
else
mydata.var3 = 7.1;
printf("%.1f", mydata.var3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是7.1,我想知道是否有人可以解释为什么输出是7.1而不是3.5。
为您的帮助加油。
c ×6
unions ×3
conditional ×1
if-statement ×1
linux-kernel ×1
memory ×1
pointers ×1
struct ×1
union ×1