继上一篇复合文字之后,今天我们继续谈一谈C99C的新特性。
C99标准是继C89标准之后的第二个C语言官方标准,于1999年12月1日正式发布,其中对数据类型(增加了对_Bool),关键字(增加了inline restrict关键字)等方面的增加无疑给我们编程 带来了诸多便利。
1.指定初始化符
指定的初始化符通常有两种用法:用于数组和用于结构和联合
(1)用于数组
用于数组的格式:[index] = vol; 其中,index表示数组的下标,vol表示本数组元素的初始化值。例如:
int x[10] = {[0] = 10, [5] = 30}; //其中x[5],x[10]得到了初始化
(2)用于结构和联合
用于结构或联合的格式如下:member-name(成员名称),对结构进行指定的初始化时,允许采用简单的方法对结构中的指定成员进行初始化。例如:
struct example{ int k, m, n; } object = {m = 10, n = 200};
注:对结构成员进行初始化的顺序没有限制。
2.伸缩型数组
C99C的另一个很让人欣喜的特性是伸缩型数组,它用于结构体中。这个特性可以声明最后一个成员是一个具有特殊属性的数组。该特使属性有两点,1.这个数组不存在,至少不是立即存在的。2.我们可以编写代码适当的使用该数组成员,就像它确实存在而且拥有你需要的任何数目的元素一样。听起来很奇怪,我们看一些例子:
struct flex { int count; double average; double score[]; };
伸缩型数组的一些使用规则:
(1)伸缩型数组成员必须是最后一个数组成员。
(2)结构中必须至少有一个其他成员。
(3)伸缩型数组就像普通数组一样被声明,除了他的方括号是空的。
struct flex ptr; ptr = malloc(sizeof(struct flex) + 5*sizeof(double));//现在我们有了足够的内存,以存储count,average和5个double型数值的数组了。可以使用ptr来访问它们类了: ptr->count = 5; ptr->score[2] = 12.3;
这样你就可以在任何时候修改结构体占用空间的大小了。