首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

数组基础知识讲解-2

数组基础知识讲解-2

2. 初始化

Int C[12] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

如上所示,我们使用大括号中一系列逗号分隔的值来初始化数组。我们把这个称之为初始化列表。大括号是必须的!逗号和值之间的空格可有可无。初始化后,数组 C 的第一个元素 C[0] 的值为 0,以此类推。

下面的小程序输出数组 Iarr 中所有元素的值。

#Include <Stdio.H>

Int Main(Void)

{

Int Iarr[4] = { 0, 1, 2, 3 };

Int I = 2;

Printf("%D
", Iarr[0]); /* 输出 0 */

Printf("%D
", Iarr[1]); /* 输出 1 */

Printf("%D
", Iarr[I]); /* 输出 2 */

Printf("%D
", Iarr[1+2]); /* 输出 3 */

Return 0;

}

如上所示,访问数组元素时,[] 里的可以是常量,可以是变量,也可以是表达式。[] 里还可以是返回值为整型的函数调用。总之,只要 [] 里的值是整数类型都可以。

注意,上面的程序,如果把 Int Iarr[4] = { 0, 1, 2, 3 }; 改成 Int Iarr[4];(即没有初始化),则它里面的元素的值是随机的,也就是本来就存在于那段内存空间的值。如果改成 Int Iarr[4]; 后再把它放在 Int Main(Void) 之前,则它里面的元素的值都是 0。具体原因我在后续的教程会说明。

如果初始化列表中的值的个数少于数组元素个数,则余下的元素都会被初始化为 0。例如:

Int Iarr[4] = { 0, 1 };

Iarr[0] 和 Iarr[1] 分别为 0 和 1;Iarr[2] 和 Iarr[3] 都被初始化为 0。注意,初始化列表中的值的个数可以少于数组元素个数,但是超过数组元素个数却是不对的!

初始化数组时,[] 里可以留空。例如:

Int Iarr[] = { 1, 2, 3 };

编译器会算出初始化列表中的值的个数,然后构造包含那么多个元素的数组。如上例,编译器会算出列表中一共有 3 个值,然后把 Iarr 构造成包含 3 个元素的数组。例如:

#Include <Stdio.H>

Int Main(Void)

{

Int Iarr[] = { 1, 2, 3 };

Printf("%D
", Iarr[0]); /* 输出 1 */

Printf("%D
", Iarr[1]); /* 输出 2 */

Printf("%D
", Iarr[2]); /* 输出 3 */

Return 0;

}

我们可以用以下表达式算出 Iarr 中元素的个数:

Sizeof Iarr / Sizeof Iarr[0]

其中,Sizeof Iarr 算出数组 Iarr 占用的内存大小,Sizeof Iarr[0] 算出 Iarr[0] 占用的内存大小(也就是数组 Iarr 中每个元素占用的内存大小),它们相除就得出 Iarr 的元素个数。Sizeof 是一个运算符,具体用法我以后会说。
返回列表