unions相关内容
我有一个typedeffed结构和一个并集.联合包含该结构和一个 uint32_t .目标是为 foo 分配一个与该结构中的“位"相对应的值. #include#include#includetypedef struct {uint32_t valA:1;uint32_t valB:1;uint32_t valC:1;uint32
..
由于我的问题此处无法自信地回答,我希望在这里再次提问某人肯定知道: 指向联合的指针与包含指向其元素的指针的联合之间是否存在任何区别(在语法上)?此示例中生成的程序集是相同的. 只要我从不访问其他成员,是否可以只为其中一个成员(不是最大的)分配内存? 关于第二个问题,C89草案的6.5.2.1说: 联合的大小足以容纳其最大的成员-最多可以随时将一个成员的值存储在联合对象中.适当地
..
以下对我来说似乎很合乎逻辑,但不是有效的c ++.联合不能隐式转换为其成员类型之一.有人知道为什么不这么做吗? 工会u {我字符c;}函数f(int i){}int main(){紫外线;v.i = 6;f(v);} 任何人都可以提出一个更干净的选择(我可以想到的最干净的是 f(vi); ,我承认这是非常干净的,但是以上内容看起来更干净) 解决方案 虽然同意Crazy Eddie的看
..
在C ++ 11中,我声明以下联合: 联盟U4 {字符c;我静态整数}; 当我使用-std = c ++ 11 -pedantic-errors在g ++ 4.7.0中编译此代码时,出现以下错误(仅进行了少量编辑): 错误:本地类"Union U4"不应具有静态数据成员"int U4 :: si" [-fpermissive] 错误:"U4 :: si"可能不是静态的,因为它是工会的
..
我有一个多线程应用程序,将数据存储为以下联合实例的数组 union unMember {浮动fData;unsigned int uiData;}; 存储此数组的对象知道联合中的数据是什么类型,因此在检索正确的类型时,UB不会出现问题.但是,在程序的其他部分,我需要测试这些联合的2个实例之间的相等性,并且在代码的这一部分中,真正的内部数据类型未知.其结果是,我无法使用这种方法测试联合的平等
..
在工作中,我一直在使用Linux和C ++ 11和C ++ 14的GCC编译器.在工作中的某些代码中,我使用联合来存储引用和指针,如下所示:(简化为重要部分) struct MyStruct{//东西联盟{double&X;double * x_ptr;};MyStruct(double& value):x(value){}//更多东西}; 我相信这段代码清晰,可读,明确,并提供了一种方便
..
当我像这样打印联合的大小时: 工会u {字符c [5];我} un; 使用此: int _tmain(int argc,_TCHAR * argv []){printf("union size =%d",sizeof(un));返回0;} 使用Visual C ++得到的答案是8,但是我希望是5.为什么? 对于同一示例,我做了这样的事情: int i1 = 0x987612
..
据我了解,我从K& R中了解到C中的并集,一个并集中的单个变量可以容纳几种类型中的任何一种,并且如果将某物存储为一种类型并提取为另一种类型,则结果纯为实现已定义. 现在,请检查以下代码段: #includeint main(无效){联盟{我字符ch [2];};联合你u.ch [0] = 3;u.ch [1] = 2;printf(“%d%d%d \ n",u.ch [
..
有没有很好的例子来说明 struct 和 union 之间的区别?基本上,我知道 struct 使用其成员的所有内存,而 union 使用最大的成员内存空间.操作系统级别是否有其他差异? 解决方案 使用联合,您只能使用其中一个元素,因为它们都存储在同一位置.当您要存储可能是几种类型之一的东西时,这很有用.另一方面,结构的每个元素都有一个单独的存储位置,并且所有这些元素都可以一次使用.
..
我有一些mpeg ts位字段,例如传输流包: struct ts_package_header_s {unsigned intcontinuity_counter:4;unsigned int Adaptation_field_control:2;unsigned int transport_scrambling_control:2;unsigned int PID:13;unsigned i
..
我的代码中有一个 struct iof_header 结构,我确定它的宽度为24个字节.我执行了sizeof(iof_header),它返回32字节宽. 问题1 为什么它的宽度是32个字节而不是24个字节? 问题2 包括其成员在内,结构如何存储在内存中? 问题3 每当我创建字节之一的结构之一时,我就会发现[4-8&20-24]都是NULL,我在char数组中看到了这一点.数组如下
..
有人要求我改变一个整数的内在性.我当时的想法是使用移位 int swap_endianess(int颜色){诠释诠释int g;int b;a =(颜色&(25524;r =(颜色&(25516;g =(颜色&(2558;b =(颜色& 255)return(b
..
说我有一个带有单个联合的类/结构...类似 struct Box { union { AS128 intr; struct { AS32 a, b, c, d; }; }; }; 为这种数据类型创建初始化列表的正确方法是什么? Box iMyBoxA = { 10, 10, 100, 100 }; Box iMyBoxB = ( Box ){ 10, 10, 100, 100 };
..
我正在尝试在C ++库(确切地说是C ++ 03)中将LARGE_INTEGER初始化为0.以前,初始化为: static LARGE_INTEGER freq = { 0 }; 在MinGW之下,它发出了警告: 缺少成员'_LARGE_INTEGER :::: HighPart'的初始化程序 因此,我根据可以在声明中初始化联合吗?: static LARGE_INTEGE
..
我有矢量3D课 class Vector3D{ public: float x; float y; float z; //some functions, e.g. operator+ - * / //some 3D-specific function }; 和向量N-D类. template class VecFloatFix
..
自从TypeScript引入并集类型以来,我想知道是否有任何理由声明枚举类型。考虑下面的枚举类型声明: 枚举X {A,B,C} var x:X = XA ; 和类似的联合体类型声明: type X:“ A” | “ B” | “ C” var x:X =“ A”; 如果它们基本上具有相同的目的,并且工会更强大且更具表现力,那么为什么枚举是
..
我在cppreference.com上找到了此代码。这是我见过的最奇怪的C ++,对此我有一些疑问: Union S { std :: string str; std :: vector vec; 〜S(){} }; int main() { S s = {“ Hello,world”}; //此时,从s.vec读取是未定义的行为 std ::
..
我有一个工会,其中包含各种兼容的 struct 成员: 枚举类型{T1,T2,…}; struct S1 {枚举类型类型; …}; struct S2 {枚举类型类型; …}; … 联合U { 枚举类型类型; struct S1 as_s1; struct S2 as_s2; … }; 处理这些结构的 type 字段为不可变的,并且仅访问与当前
..
我需要管理位域数据和联合。这是我在C语言中认为的代码: typedef struct __attribute __((__ packed __)){ union { struct __attribute __((__ packed __)){ unsigned short protocol:4; 未签名的空头目标:12; unsigned short target_mode:
..
在下面的示例中,我希望 complex_t 的大小与 uint16_t 相同:2个字节,但是这是3个字节。 删除第二个联合(“ proximity_unsafe”)可将大小减小到2个字节,但我无法弄清楚打包规则的模型。 #include #include typedef union { uint16_t不安全; struct
..