返回首页

声明零大小的数组说

int x[0];
功能直接产生编译错误。
我们不允许创建一个大小为零的阵列。

但是,当我们创建了一个结构有此零大小的数组,那么为什么它被允许吗?
{C}为什么SIZEOF(三)返回8个字节?
插入零大小的数组结构的目的可能是什么?

回答

评论会员:OriginalGriff 时间:2012/02/07
。它是一个占位符 - 这意味着,结构不会有相同的大小,每次返回时,
基本上,结构返回信息,根据你的价值,想想:如果你问网络上的所有机器的ID,它返回一个ID数组。如果你问一个特定的机器ID,阵列是闲置的。
这是一个从C解酒,坦率地说,有更好的方法可以做到这在C
评论会员:游客 时间:2012/02/07
这是从C继承的做法,但你的第一个问题是无关为什么8个字节内存身体以字节为单位组织的当日已经与8位微处理器。更大的"话"处理器不动字节作为他们的母语单位。访问单个字节,其实需要的处理器掩蔽和移位。热衷于这种"惩罚",个别结构领域"处理器单词边界"上的"对齐"。对于32位处理器,这是4个字节。你的结构是8字节长,因为4服务诠释十,其他4个服务字符Y(1是char,其他3个是填充)。什么是大小为零C不被"强类型"C是,有没有"动态结构的支持"。零大小的数组本质上是一个允许表达,如codepreC.z[spanclass="code-digit"3/span]/pre/code允许您访问4RD(31)诠释后结构的起始地址。这将在您的案件(其中C堆栈上)写的东西(导致未定义的行为)但与动态内存,这个想法是像的东西{体C3}今天这不再是有效的C代码,由于各种原因(没有敷设渠道的malloc分配的内存,所以在地方建设和就地销毁明确要求,在情况下XYZ包含somting像对象要求建设,其他比普通的数据,),但访问内存是在一个给定的方式layed出的低层次的东西,仍然可以使用。更现代的C代码可能会定义您的结构,如但resultingmemory布局将是完全不同的(std::vector的包含"指针"一个动态分配的内存)