四时宝库

程序员的知识宝库

C语言学习|数组的初始化(数组的定义,初始化和使用,c语言数组详解)

定义数组后,它所占的存储单元的值是不确定的。引用数组元素之前,必须保证数组的元素已被赋值予确定的值。除从键盘输入或直接使用赋值语句给数组元素赋值的方式外,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};

而自动类型的数组的初始化是在程序运行时执行的。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接