首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于数组元素未初始化时的值的有关问题

2012-03-04 
关于数组元素未初始化时的值的问题#includeiostreamusingnamespacestdvoidmain(){inta[5]{1,2,3}cout

关于数组元素未初始化时的值的问题
#include   <iostream>
using   namespace   std;
void   main()
{
int   a[5]={1,2,3};
cout < <a[4];
char   b[4]= "hi ";
cout < <b[0] < <b[1] < <b[2] < <b[3] < < "i " < <endl;
}
结果是
0hi     i
a[4]没有初始化,为什么它的值是0?
b[2]和b[3]为什么输出的都是空格,空格的ascii码是0吗?
能解释一下吗?

[解决办法]
a[4]没有初始化,为什么它的值是0?
a[4]实际上是被初使化了.对于你的操作:int a[5]={1,2,3};后面的元素未涉及的,都会自动以0来初使化,所以有一种对局数变量的数组清零的简单方法,即: int a[5]={0};这样就把所有元素都自动初使化成0了.用的也是这个特性.

b[2]和b[3]为什么输出的都是空格,空格的ascii码是0吗?
b[2], b[3]输出的内容在我的devcpp里面不是空格.这个可能和具体的编译器有关.
空格的ascii码明显不是0,要知道是多少,可以这样查看:
printf( "%d\n ", ' ');
最后你会发现,输出的是32(这就是空格的ASCII码)

[解决办法]
初始化规则:
如果提供的初始化元素小于初始化长度,
那么没有提供初始化元素的空间都被默认初始化为 0

所以,
int a[5]={1,2,3}; //长度5,元素只有3个,所以 a[3] = a[4] = 0
char b[4]= "hi "; //长度4,提供3元素【注意\0的存在】,所以b[3]=0

char 的 0的输出一般不会是空格

热点排行