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

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位小端模式。

猜你喜欢

转载自blog.csdn.net/haibing_x/article/details/94591271
今日推荐