C99C新增内容

    继上一篇复合文字之后,今天我们继续谈一谈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;

         这样你就可以在任何时候修改结构体占用空间的大小了。

 

 

posted @ 2015-10-12 19:22  消沙  阅读(659)  评论(0编辑  收藏  举报