`
Stephanie_1
  • 浏览: 11516 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

union 和struct的sizeof问题

 
阅读更多

//还没有想过union和struct有啥区别,因为我就没有用过union,今天在一个题目中才发现了:



union{
	char bj[5];
	int bh[2];
	int hh[3];
}u;
class C
{
	char bj[5];
	int bh[2];
	int hh[3];
};


struct  
{
	char bj[5];
	int bh[2];
	int hh[3];
}s;
strcpy(u.bj, "54");
cout<<"u.bj:  "<<u.bj<<endl;
u.bh[0] = 3;
u.bh[1] = 5;
cout<<"u.bj:  "<<u.bj<<endl;
cout<<"u.bh:  "<<u.bh[0]<<u.bh[1]<<endl;

cout<<"sizeof u: "<<sizeof(u)<<endl;
cout<<"sizeof c: "<<sizeof(C)<<endl;
cout<<"sizeof s: "<<sizeof(s)<<endl;


//运行如下:


//最后查完了, 原来struct 的大小是其最大数据类型的整数倍,而Union只和最大的数据类型相关,查的说是Union所有的数据成员在一个内存单元中,这就是为什么当u中的其

//他数据成员被修改了之后,最开始被赋值的bj字符串变成了奇怪的符号。

分享到:
评论

相关推荐

    sizeof 用法汇总 C和C++的语法

    6. `union`和`struct`的`sizeof`: - 在`union`中,`sizeof`返回的是所有成员中最大尺寸的那个。 - 在`struct`中,由于内存对齐,成员的排列可能会影响到结构体的总大小。通常,结构体会按照成员大小对齐,如果...

    详细解析C语言中的sizeof

    例如,假设有一个结构体包含`char`和`double`类型,即使`char`和`double`的总字节数为9,`sizeof(struct)`的结果可能是12,因为编译器可能会插入额外的空间使`double`类型对齐到4的倍数地址上。 #### 四、`sizeof`...

    个人整理sizeof()用法汇总

    `sizeof()`是一个C++语言中的运算符,用于计算数据类型或者...理解并熟练运用`sizeof()`是编程中提高效率和减少内存浪费的关键。通过掌握这些用法,开发者可以更好地控制程序的内存管理,编写更高效、更健壮的代码。

    深入了解C++ 结构体(struct)与共用体(union)

    在C++编程语言中,结构体(struct)和共用体(union)是两种基本的数据类型,它们都是从C语言继承而来的,并且C++对它们进行了扩充和改进。本文将深入了解C++ 结构体和共用体的相关资料,帮助大家更好地理解和学习...

    c++ 面试题 总结

    struct X { unsigned char s1:2; unsigned char s2:3; unsigned char s3:3; } x; unsigned char c; } v; v.c = 100; printf("%d", v.x.s3); } 3 --------------------------------------------------...

    ( 滴滴出行2017秋招系统岗笔试真题汇总.pdf )

    ( 滴滴出行2017秋招系统岗笔试真题汇总.pdf ) ( 滴滴出行2017秋招系统岗笔试真题汇总.pdf ) ( 滴滴出行2017秋招系统岗笔试真题汇总.pdf ) ( 滴滴出行2017秋招系统岗笔试真题汇总.pdf )

    51CTO总结的C++经典面试题和答案

    在C++中,sizeof操作符可以用于获取数组、struct和union的大小。 九、面试题和答案 本资源还包括了多个面试题和答案,涵盖了C++的多方面知识点,包括变量的作用域、全局变量和局部变量、静态变量和普通变量、循环...

    sizeof使用说明

    2. **计算结构体、联合体等复杂类型的数据大小**:`sizeof`同样可以用于复合数据类型,如结构体(`struct`)或联合体(`union`)。这在内存分配和处理复杂数据结构时非常有用。 3. **测量动态分配内存的大小**:...

    嵌入式C_C++语言精华

    - 结合`struct`和`union`,例如定义一个可以发送不同类型的报文的结构体:`struct CommuPacket { int iPacketType; union { struct structA packetA; struct structB packetB; struct structC packetC; } };` 4. *...

    系统内核结构

    typedef struct _EPROCESS_XP_SP3 // 107 elements, 0x260 bytes (sizeof) { /*0x000*/ struct _KPROCESS_XP_SP3 Pcb; // 29 elements, 0x6C bytes (sizeof) /*0x06C*/ struct _EX_PUSH_LOCK ProcessLock; // 5 ...

    struct 的巨大作用,识别有经验的大神

    相比之下,有经验的开发者会巧妙地利用`struct`来解决这个问题。他们可能会定义一个包含报文类型的整型变量和一个`union`,`union`中包含三种不同的结构体,分别对应不同的报文格式。这样的设计允许直接以结构体的...

    嵌入式c c++ 精华

    - 发送函数 `Send` 接收字节流的首地址和长度作为参数,可以直接传递 `struct CommuPacket` 实例的地址和大小。 ```c Send((char*)&sendCommuPacket, sizeof(CommuPacket)); ``` - 接收函数 `Recv` 同样接收...

    嵌入式C精华经典教程

    - **union 的特点与应用**:了解如何利用 union 来节省内存空间和实现类型转换。 #### 五、嵌入式Linux移植与设备驱动 - **知识点13:基于ARM的嵌入式Linux移植** - **基本概念**:理解嵌入式Linux移植的基本...

    华为微软等公司编程语言面试题.pdf

    2. 使用typedef关键字可以定义新的数据类型,例如union和struct。 函数 1. 函数的返回值可以是表达式的结果,例如返回a++的值。 2. 函数可以传递指针作为参数,例如multi函数传递了三个int类型的指针。 队列和栈 ...

    嵌入式系统编程修炼 arm linux c

    C/C++基础结构:struct与union #### 1.1 结构体(struct) 在C/C++中,`struct`是一种复合数据类型,用于组合不同类型的变量,以形成一个单一的数据结构。结构体中的成员可以是不同的数据类型,包括其他结构体。例如...

    嵌入式C语言精华文章集锦

    unsigned int receivedLength = Recv(&recvCommuPacket, sizeof(struct CommuPacket)); ``` 之后可以根据`recvCommuPacket.iPacketType`的值来确定接收到了哪种类型的报文,并进行相应的处理。 通过上述示例可以...

    C C++ 精华题典

    根据给定的信息,“C C++ 精华题典”主要涵盖了C/C++语言的关键知识点和技术实践案例。...通过对这些知识点的学习和实践,可以帮助程序员更好地掌握C/C++语言的核心概念和技术细节,提高解决实际问题的能力。

    嵌入式面试资料(嵌入式程序员面试须知)

    当多个线程需要访问同一资源时,为了避免数据竞争和不一致性问题,需要通过同步机制来控制线程对资源的访问。同步通常涉及到锁(Locks)、信号量(Semaphores)等机制,确保同一时刻只有一个线程可以访问共享资源。 ...

Global site tag (gtag.js) - Google Analytics