网站首页 > java教程 正文
定义数组后,它所占的存储单元的值是不确定的。引用数组元素之前,必须保证数组的元素已被赋值予确定的值。除从键盘输入或直接使用赋值语句给数组元素赋值的方式外,C语言还提供了另外一种方式,即在数组定义时就给元素赋初值,元素的初值在“=”后面用一对花括号括起来的初始化列表中给出。
如:
matrix[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};//按元素初始化
经过这样初始化后,数组matirx中的元素如下所示:
1234
5678
9101112
对于二维数组,既可以按元素初始化,也可以按行初始化,如:
matrix[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};//按行初始化
当数组元素的初值全部列于初始话列表中时,可省略对数组的第一维长度的声明,例如:
matrix[][4]={1,2,3,4,5,6,7,8,9,10,11,12};//按元素初始化
或
matrix[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};//按行初始化
此时,系统自动初始化列表中提供的初值个数对数组的长度定义。
但值得注意的是,第二维的长度声明不能省略,因为在C语言中二维数组在内存中是按行存放的。
如果不声明第二维的长度,那么编译器就无法知道数组有多少列,在列数未知的情况下,即使给定全部初值也无法判断数组究竟有多少行多少列。因为在行列数之积已知时,具体的行列数会有多种可能的组合,不是唯一确定。
初始化列表中的初值个数不能多于数组元素的个数,但可少于数组元素的个数。当初始化列表中提供的初值个数少于数组元素的个数时,系统将自动给后面的元素赋初值0。如
matirx[3][4]={0};
等价于
matirx[3][4]={0,0,0,0,0,0,0,0,0,0,0,0};
需要提醒读者注意的是,数组不能自动初始化0,至少要将数组的第一个元素初始化为0,这样余下的元素才会被自动初始化为0。例如:
matrix[3][4]={{1,2},{5,6},{9,10}};
对数组matirx初始化的结果是:
1200
5600
91000
注意,当给数组部分元素赋初值时,对数组的长度声明不能省略。
当数组被声明为静态存储类型或外部存储类型(即在所有函数外部定义)时,由于数组元素的初始化是在程序运行前(即编译时)执行时,因此在不显示给出初值的情况下,数组元素将被自动初始化为0。
例如
static a[4];
等价于
static a[4]={0,0,0,0};
而自动类型的数组的初始化是在程序运行时执行的。
猜你喜欢
- 2024-10-23 运维--shell 中数组的操作(shell中数组如何定义)
- 2024-10-23 C/C++编程笔记:C 语言字符数组的定义与初始化,讲解到位
- 2024-10-23 Java SE之——数组 基础篇(java入门数组基础educoder)
- 2024-10-23 初识Java—(十)数组(1)(初识java)
- 2024-10-23 巧用C语言中数组部分元素初始化(c语言数组全部初始化为0)
- 2024-10-23 C语言数组算法实现_初始化(c语音数组初始化)
- 2024-10-23 北大学霸!手抄万字Java数组笔记,2小时吃透,你确定不拿走?
- 2024-10-23 C语言中的数组:声明、初始化和操作
- 2024-10-23 「C语言」初始化数组,C语言中初始化特定列表和元素
- 2024-10-23 C语言一维数组,如何初始化?有哪些方式?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)