论文部分内容阅读
摘 要:在不同上下文语境中,探讨各种类型的C语言数组所呈现出的宏观和微观状态。通过横向和纵向的对比分析,系统地阐述了这些状态形成和改变的原理。
关键词:C语言;数组;元素
中图分类号:TP313文献标识码:A文章编号:1672-3198(2009)16-0255-02
1 整型数组状态分析
1.1 整型数组初始化后的状态分析
以下代码在定义一维整型数组时初始化部分元素,并输出全部单元的值。
int a[4]={1,2},i;
for(i=0;i<=3;i++) printf("%d ",a[i]);
在编译系统下运行,输出结果如下:
1 2 0 0
结果分析:对一维整型数组中的部分元素初始化,未初始化的元素自动赋为0值。
以下代码在定义二维整型数组时初始化部分元素,并输出全部单元的值。
int a[3][4]={1,2},i,j;
for(i=0;i<=2;i++)
{printf("\n");for(j=0;j<=3;j++)printf("%d ",a[i][j]);}
输出结果如下:
1 2 0 0
0 0 0 0
0 0 0 0
结果分析:二维数组和多维数组从本质上来说,就是一维数组,只不过这类一维数组的每个元素也是一个数组而已。比如此二维数组实际是含有三个元素的一维数组,每一行是它的一个元素,每个元素又是一个一维数组。
1.2 给整型数组元素赋值后的状态分析
给整型数组中的部分元素赋值后,对其他未赋值元素不产生影响,保持原值。
1.3 输入数据给整型数组元素后的状态分析
为整型数组中的部分元素输入数据后,对其他元素不产生影响,保持原值。
2 浮点型数组状态分析
2.1 浮点型数组初始化后的状态分析
以下代码在定义一维浮点型数组时初始化部分元素,并输出全部单元的值。
float a[4]={0.1,0.2};int i;
for(i=0;i<=3;i++) printf("%f ",a[i]);
输出结果如下:
0.100000 0.200000 0.000000 0.000000
结果分析:对一维浮点型数组中的部分元素初始化,未初始化的元素自动赋为0.000000,这和整型数组类似。
2.2 给浮点型数组元素赋值后的状态分析
给浮点型数组中的部分元素赋值后,对其他未赋值元素不产生影响,保持原值。
2.3 输入数据给浮点型数组元素后的状态分析
为浮点型数组中的部分元素输入数据后,对其他元素不产生影响,保持原值。
3 字符数组状态分析
3.1 字符数组初始化后的状态分析
以下代码在定义一维字符数组时初始化部分元素,并输出全部单元的值。
char a[6]={'o','k'};int i;
for(i=0;i<=5;i++) printf("%c",a[i]);
输出结果如下:
ok¢¢¢¢
结果分析:对一维字符数组中的部分元素初始化,未初始化的元素自动赋为空字符(即'\0')。需要说明的是,在BC for Windows中用“¢”表示空字符,而在BC for Dos中用空格代替输出的空字符。不同编译系统显示输出的空字符的方式有所不同。
3.2 给字符数组元素赋值后的状态分析
给字符数组中的部分元素赋值后,对其他未赋值元素不产生影响,保持原值。
3.3 输入数据给字符数组元素后的状态分析
为字符数组中的部分元素输入数据后,对其他元素不产生影响,保持原值。
值得注意的是,在C语言中,以字符'\0'作为字符串的结束标志,把字符串作为字符数组处理。在程序中根据'\0'的位置判断字符串是否结束,而和字符数组的长度无关。换句话说,在字符数组中出现的第一个'\0'之前的字符才是字符串中的有效字符。
以下代码用一个字符串常量对一维字符数组初始化,而后向数组中输入另一个较短的字符串,初始化和输入后都输出全部单元的值。
char a[10]="Computer";int i;
for(i=0;i<=9;i++) printf("%c",a[i]);
scanf("%s",a);
for(i=0;i<=9;i++) printf("%c",a[i]);
输入:good输出结果如下:Computer¢¢good¢ter¢¢
结果分析:虽然部分元素‘t’、‘e’、‘r’并未被输入的新串覆盖,保持了原值,但它们已不属于数组中存放的字符串(即“good”)的有效字符。
4 指针数组状态分析
4.1 指针数组初始化后的状态分析
以下代码在定义一维指针数组时初始化部分元素,并输出全部单元的值。
int b,c,i;int* a[4]={&b,&c};
for(i=0;i<=3;i++) printf("%d ",a[i]);
输出结果如下:6586 6584 0 0
结果分析:输出结果的前两个数是变量b、c的有效地址,未初始化的元素自动赋为0值。
4.2 给指针数组元素赋值后的状态分析
给指针数组中的部分元素赋值后,对其他未赋值元素不产生影响,保持原值。
4.3 输入数据给指针数组元素后的状态分析
为指针数组中的部分元素输入数据后,对其他元素不产生影响,保持原值。
5 结构体数组状态分析
5.1 结构体数组初始化后的状态分析
以下代码在定义一维结构体数组时初始化部分元素,并输出全部单元的值。
struct student
{long num; char name[20]; char sex; float score;
}stu[3]={{99020122,"Feng Hao",'M',72.5},{99020130,"Han Jie",'F',83.5}};
int i;
for(i=0;i<=2;i++)
printf("%8ld %20s %c %.1f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].score);
输出结果如下:
99020122 Feng Hao M 72.5
99020130Han JieF 83.5
0¢0.0
结果分析:对一维结构体数组中的部分元素初始化,未初始化的元素的成员和前面提到的标准类型数组初始化的处理方式相同。如果只对第一个元素的部分成员初始化,则此元素的未初始化成员以及其余未初始化的元素也类似处理。比如将以上代码第3行做如下修改:
}stu[3]={99020122,"Feng Hao"};
其余代码不变,输出结果如下:
99020122 Feng Hao ¢0.0
0 ¢0.0
0 ¢0.0
5.2 给结构体数组元素赋值后的状态分析
给结构体数组中的部分元素或某个元素的部分成员赋值后,对其他未赋值元素或这个元素的未赋值成员不产生影响,保持原值。
5.3 输入数据给结构体数组元素后的状态分析
为结构体数组中的部分元素或某个元素的部分成员输入数据后,对其余元素或这个元素的其余成员不产生影响,保持原值。
参考文献
[1]谭浩强.C程序设计[M].北京:清华大学出版社,2004.
关键词:C语言;数组;元素
中图分类号:TP313文献标识码:A文章编号:1672-3198(2009)16-0255-02
1 整型数组状态分析
1.1 整型数组初始化后的状态分析
以下代码在定义一维整型数组时初始化部分元素,并输出全部单元的值。
int a[4]={1,2},i;
for(i=0;i<=3;i++) printf("%d ",a[i]);
在编译系统下运行,输出结果如下:
1 2 0 0
结果分析:对一维整型数组中的部分元素初始化,未初始化的元素自动赋为0值。
以下代码在定义二维整型数组时初始化部分元素,并输出全部单元的值。
int a[3][4]={1,2},i,j;
for(i=0;i<=2;i++)
{printf("\n");for(j=0;j<=3;j++)printf("%d ",a[i][j]);}
输出结果如下:
1 2 0 0
0 0 0 0
0 0 0 0
结果分析:二维数组和多维数组从本质上来说,就是一维数组,只不过这类一维数组的每个元素也是一个数组而已。比如此二维数组实际是含有三个元素的一维数组,每一行是它的一个元素,每个元素又是一个一维数组。
1.2 给整型数组元素赋值后的状态分析
给整型数组中的部分元素赋值后,对其他未赋值元素不产生影响,保持原值。
1.3 输入数据给整型数组元素后的状态分析
为整型数组中的部分元素输入数据后,对其他元素不产生影响,保持原值。
2 浮点型数组状态分析
2.1 浮点型数组初始化后的状态分析
以下代码在定义一维浮点型数组时初始化部分元素,并输出全部单元的值。
float a[4]={0.1,0.2};int i;
for(i=0;i<=3;i++) printf("%f ",a[i]);
输出结果如下:
0.100000 0.200000 0.000000 0.000000
结果分析:对一维浮点型数组中的部分元素初始化,未初始化的元素自动赋为0.000000,这和整型数组类似。
2.2 给浮点型数组元素赋值后的状态分析
给浮点型数组中的部分元素赋值后,对其他未赋值元素不产生影响,保持原值。
2.3 输入数据给浮点型数组元素后的状态分析
为浮点型数组中的部分元素输入数据后,对其他元素不产生影响,保持原值。
3 字符数组状态分析
3.1 字符数组初始化后的状态分析
以下代码在定义一维字符数组时初始化部分元素,并输出全部单元的值。
char a[6]={'o','k'};int i;
for(i=0;i<=5;i++) printf("%c",a[i]);
输出结果如下:
ok¢¢¢¢
结果分析:对一维字符数组中的部分元素初始化,未初始化的元素自动赋为空字符(即'\0')。需要说明的是,在BC for Windows中用“¢”表示空字符,而在BC for Dos中用空格代替输出的空字符。不同编译系统显示输出的空字符的方式有所不同。
3.2 给字符数组元素赋值后的状态分析
给字符数组中的部分元素赋值后,对其他未赋值元素不产生影响,保持原值。
3.3 输入数据给字符数组元素后的状态分析
为字符数组中的部分元素输入数据后,对其他元素不产生影响,保持原值。
值得注意的是,在C语言中,以字符'\0'作为字符串的结束标志,把字符串作为字符数组处理。在程序中根据'\0'的位置判断字符串是否结束,而和字符数组的长度无关。换句话说,在字符数组中出现的第一个'\0'之前的字符才是字符串中的有效字符。
以下代码用一个字符串常量对一维字符数组初始化,而后向数组中输入另一个较短的字符串,初始化和输入后都输出全部单元的值。
char a[10]="Computer";int i;
for(i=0;i<=9;i++) printf("%c",a[i]);
scanf("%s",a);
for(i=0;i<=9;i++) printf("%c",a[i]);
输入:good输出结果如下:Computer¢¢good¢ter¢¢
结果分析:虽然部分元素‘t’、‘e’、‘r’并未被输入的新串覆盖,保持了原值,但它们已不属于数组中存放的字符串(即“good”)的有效字符。
4 指针数组状态分析
4.1 指针数组初始化后的状态分析
以下代码在定义一维指针数组时初始化部分元素,并输出全部单元的值。
int b,c,i;int* a[4]={&b,&c};
for(i=0;i<=3;i++) printf("%d ",a[i]);
输出结果如下:6586 6584 0 0
结果分析:输出结果的前两个数是变量b、c的有效地址,未初始化的元素自动赋为0值。
4.2 给指针数组元素赋值后的状态分析
给指针数组中的部分元素赋值后,对其他未赋值元素不产生影响,保持原值。
4.3 输入数据给指针数组元素后的状态分析
为指针数组中的部分元素输入数据后,对其他元素不产生影响,保持原值。
5 结构体数组状态分析
5.1 结构体数组初始化后的状态分析
以下代码在定义一维结构体数组时初始化部分元素,并输出全部单元的值。
struct student
{long num; char name[20]; char sex; float score;
}stu[3]={{99020122,"Feng Hao",'M',72.5},{99020130,"Han Jie",'F',83.5}};
int i;
for(i=0;i<=2;i++)
printf("%8ld %20s %c %.1f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].score);
输出结果如下:
99020122 Feng Hao M 72.5
99020130Han JieF 83.5
0¢0.0
结果分析:对一维结构体数组中的部分元素初始化,未初始化的元素的成员和前面提到的标准类型数组初始化的处理方式相同。如果只对第一个元素的部分成员初始化,则此元素的未初始化成员以及其余未初始化的元素也类似处理。比如将以上代码第3行做如下修改:
}stu[3]={99020122,"Feng Hao"};
其余代码不变,输出结果如下:
99020122 Feng Hao ¢0.0
0 ¢0.0
0 ¢0.0
5.2 给结构体数组元素赋值后的状态分析
给结构体数组中的部分元素或某个元素的部分成员赋值后,对其他未赋值元素或这个元素的未赋值成员不产生影响,保持原值。
5.3 输入数据给结构体数组元素后的状态分析
为结构体数组中的部分元素或某个元素的部分成员输入数据后,对其余元素或这个元素的其余成员不产生影响,保持原值。
参考文献
[1]谭浩强.C程序设计[M].北京:清华大学出版社,2004.