【C语言学习记录10】struct和union分析

本文探讨了C语言中的struct和union特性。对于struct,文章分析了空结构体的内存占用情况,指出其实际内存可能因编译器而异,并介绍了柔性数组的概念及其用法。在union部分,解释了union如何共享空间以及在大小端系统中的行为,并提供了一个判断系统大小端的程序示例。
摘要由CSDN通过智能技术生成

struct分析

C语言中struct可以看作变量的集合。

struct的问题:

空结构体占用多大内存?(没有成员变量)

第一种观点:占用内存为0;(gcc编译器)

第二种观点:本来为了将不同变量结合使用。若没有成员则与设计初衷违背,故错误。(BCC/VS)

灰色地带,与编译器有关,实际开发中,没人这么干。

程序验证,空结构体t1t2内存为0,地址差4位,加以区分对象t1t2

C++标准规定任何两个不同的对象,不能拥有相同的地址。

柔性数组

柔性数组即数组大小待定的数组。

C语言中可以由结构体产生柔性数组;

C语言结构体的最后一个元素可以是大小未知的数组

柔性数组的用法:(优势是带了长度信息)

程序分析:

union分析

  1. C语言中的union在语法上与struct相似
  2. union只分配最大成员的空间,所有成员共享这个空间。

union的使用受系统大小端的影响

小端:低地址存储低位数据。

大端:低地址存储高位数据。

整型数10进制先变成二进制,每四位用一个16进制数表示,共四个字节。

不管大小端模式,C.c始终从低地址取数据。

该程序可以完成判断系统是大小端的实验。

我自己的ubuntu17.04位小端模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值