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;

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

 

时间: 2024-12-25 12:40:03

C99C新增内容的相关文章

chattr和lsattr命令,不能被删除、改名、设定链接关系,同时不能写入或新增内容

chattr和lsattr命令详解 chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多功能不能实现.同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持.另外,通过chattr命令修改属性能够提高系统的安全 性,但是它并不适合所有的目录.chattr命令不能保护/./dev./tmp./var目录. lsattr比较简单,只是显示文件的属性[root]#lsattr ----ia---j--- ./lsattr_te

AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码

AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码 添加Watch应用对象时新增内容介绍 Watch应用对象添加到创建的项目中后,会包含两个部分:Watch App 和 WatchKit Extension,如图2.18所示.其中,Watch App部分位于用户的iWatch上,它目前为止只允许包含Storyboard文件和Resources文件.在我们的项目里,这一部分不包括任何代码.WatchKit Extension部分位于用户的iPhone安装的对应App上,这

10.spritkit征程——使用nodes来新增内容

10.spritkit征程--使用Nodes来新增内容 上文讲到新的场景空无一物,略显凄凉,因此今天我们今天首要任务就是往里面填东西,比如:一架简陋的太空船.友情提示:请勿过分憧憬项目最后会给你呈现一架华丽的飞机.orz-.. 我始终坚信把基础知识讲清楚,将全面,简单化比那些所谓的长篇大论.举例无数的书本来的美妙.因此我们首先来理清一下几个东西: 关键的几个概念: SKView: 在SpriteKit中扮演着作为视图呈现内容的重要角色,继承于UIView . SKNode: 是SpriteKit

<JAVA8新增内容>关于集合的操作(Collection/Iterator/Stream)

因为下文频繁使用lambda表达式,关于Java中的lambda表达式内容请见: http://www.cnblogs.com/guguli/p/4394676.html 一.使用增强的Iterator遍历集合元素 Iterator接口也是Java集合框架的成员,但它与Collection系列,Map系列的集合不一样:Collection系列集合,Map系列集合主要用于承装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器

jQuery.1.9 live 代替事件 on 新增内容无法触发事件

如果是新增 append 或者 html() 事件添加的内容,无法触发 click 事件, 在1.9 可以用live 事件来代替 1.9以后用 <div class="search-result-list"> <ul> <li data='11'>我是内容</li> <li data='12'>我是内容</li> </ul> </div> 如果<li>是新增的内容 , 就无法触发

h5新增内容

一.h5新增标签:摘取w3cSchool: <article>定义 article.<aside> 定义页面内容之外的内容. <footer> 定义 section 或 page 的页脚.<header>定义 section 或 page 的页眉.<section>定义 section. <nav>定义导航链接. <canvas> 定义图形.<audio> 定义声音内容. <video>定义视频.&

HTML5+CSS3新增内容总结!!!!!绝对干货

说到H5C3会不会觉得东西好多啊,今天就整理了一份总结性的内容: CSS3选择器有哪些?答:属性选择器.伪类选择器.伪元素选择器.CSS3新特性有哪些?答:1.颜色:新增RGBA,HSLA模式 文字阴影(text-shadow.) 边框: 圆角(border-radius)边框阴影: box-shadow 盒子模型:box-sizing 背景:background-size 设置背景图片的尺寸background-origin 设置背景图片的原点background-clip 设置背景图片的裁切

【重磅】App内可直接打开微信小程序,新增内容安全接口等

今晚,微信又公布了几项微信小程序新能力: 微信小程序上线App直接打开小程序功能 内容安全接口.插件详情页等多种能力接连更新上线 一.App直接打开小程序 之前微信已经开放过相关能力,可以实现App和微信小程序之间的相互跳转,但并没有完全开放跳转能力: 必须先使用"APP链接分享到微信打开为小程序"能力用户仅可从APP分享至微信的"小程序卡片",访问时打开来源应用,其他路径暂不支持 . 这种方式体验很不好,不少用户吐槽分享到微信的内容被强制跳转小程序. 那么本次小程

Css新增内容

css3新增属性 可节省设计时间的属性 border-color:控制边框的颜色,并且有更大的灵活性,可以产生渐变效果 border-image:控制边框图像 border-radius:能产生类似圆角矩形的效果 text-shadow:文字投影 box-shadow:元素盒子投影 multiple backgrounds:多重背景图像,可以让一个元素有多个背景图像 例: 定义了三个背景图,下面分别对应背景图的位置 background-image:url(0.1png),url(0.2png)