struct分析
C语言中struct可以看作变量的集合。
struct的问题:
空结构体占用多大内存?(没有成员变量)
第一种观点:占用内存为0;(gcc编译器)
第二种观点:本来为了将不同变量结合使用。若没有成员则与设计初衷违背,故错误。(BCC/VS)
灰色地带,与编译器有关,实际开发中,没人这么干。
程序验证,空结构体t1、t2内存为0,地址差4位,加以区分对象t1、t2。
C++标准规定任何两个不同的对象,不能拥有相同的地址。
柔性数组即数组大小待定的数组。
C语言中可以由结构体产生柔性数组;
C语言结构体的最后一个元素可以是大小未知的数组
柔性数组的用法:(优势是带了长度信息)
程序分析:
union分析
- C语言中的union在语法上与struct相似
- union只分配最大成员的空间,所有成员共享这个空间。
union的使用受系统大小端的影响
小端:低地址存储低位数据。
大端:低地址存储高位数据。
整型数10进制先变成二进制,每四位用一个16进制数表示,共四个字节。
不管大小端模式,C.c始终从低地址取数据。
该程序可以完成判断系统是大小端的实验。
我自己的ubuntu17.04位小端模式。