打印本文 打印本文  关闭窗口 关闭窗口  
C语言程序设计(第5章数组)4
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:00:15  文章录入:杜斌  责任编辑:杜斌

5.4 数组的初始化
5.4.1 数组初始化
C语言允许在说明时对全局数组和静态局部数组初始化,但不能对非静态局部数组初始化。
与其它变量相似,数组初始化的一般形式如下:
    type-specifier array_name[size1]...[sizen]={value-list};
    数值表是一个由逗号分隔的常量表。这些常量的类型与类型说明相容,第一个常量存入数组的第一个单元,第二个常量存入第二个单元,等等,注意在括号“ }”后要加上分号。
    下列中一个1 0元素整型数组被初始化装入数字1到10:
    int i[10]={1,2,3,4,5,6,7,8,9,10 } ;
这意味着i[0]的值为1,而i[9]的值为10。
存放字符串的字符数组的初始化可采用如下简化的形式:
    char array_name[size] = "string";
    例如,以下代码段将str 初始化为”hello”。
    char str[6] = "hello";
    上面代码产生和下面代码相同的结果:
    char str[6]={’h’,’ e ’ ,’ l ’ ,’ l ’ ,’ o ’ ,’\o ’};
    因为C语言中的字符串都以空( NULL)字符为终结,故要确认定义的数组足够长以存放空字符。这就是为什么h ello只有5个字符,而str 要有6个字符长的原因。使用字符串常量时,编译程序自动地在末尾加上空字符。
    多维数组初始化的方法与一维数组相同,例如,下式将sqrs初始化为从1到1 0及它们各自的平方数。
int sqrs[10][2]={
                    1,1,
                    2,4,
                    3,9,
                    4,1 6 ,
                    5,2 5 ,
                    6,3 6,
                    7,4 9 ,
                    8,6 4 ,
                    9,8 1,
                    1 0,1 0 0 ,
                 } ;



5.4.2 变长数组的初始化
    设想用数组初始化的方法建立一个如下错误信息表:
    char e1[12] = "read error\n";
    char e2[13] = "write error\n";
    char e3[18] = "cannot open file\n";
    可以想象,如果用手工去计算每一条信息的字符数以确定数组的长度是何等的麻烦。利用变长数组初始化的方法可以使C自动地计算数组的长度。变长数组初始化就是使C编译程序自动建立一个不指明长度的足够大的数组以存放初始化数据。使用这种方法,以上信息表变为:
    char e1[] = "read error\n";
    char e2[] = "write error\n";
    char e3[] = "cannot open file\n";
    给定上面的初始化,下面的语句printf("%s has length %d\n" ,e2,sizeof(e2));
将打印出:
write error
has length 13
除了减少麻烦外,应用变长数组初始化使程序员可以修改任何信息,而不必担心随时可能发生的计算错误。
变长数组初始化的方法不仅仅限于一维数组。但在对多维数组初始化时,必须指明除了
第一维以外其它各维的长度,以使编译程序能够正确地检索数组。其方法与数组形式参数的
说明类似。这样就可以建立变长表,而编译程序自动地为它们分配存储空间。例如,下面用
变长数组初始化的方法定义数组sqrs:
int sqrs[ ][2]={
                    1,1,
                    2,4,
                    3,9,
                    4,1 6,
                    5,2 5,
                    6,3 6,
                    7,4 9,
                    8,6 4,
                    9,8 1,
                    1 0,1 0 0
                } ;
    相对定长数组的初始化而言,这种说明的优点在于可以在不改变数组各维长度的情况下,随时增加或缩短表的长度。
打印本文 打印本文  关闭窗口 关闭窗口