c语言定义一个不知道长度的数组_C语言学习|数组的初始化

82561ae689066e3dfd13c1e5c31d36ab.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值