学习C语言也有一段时间了,进展很慢。过程中多多少少都领悟到了一些东西,在这里想把它写下来,算是一个阶段总结,
也算是一个新的起点。
请各位不要笑话,认为我在学习过程中,吹毛求疵。
下面我对 定义数组时立即初始化语句 即char array[12]="/0"; 谈一下我的看法以及延伸总结。
首先我认为char array[12]="/0";是定义了一个长度为12的字符数组,并且所有的字符被赋值为'/0'。
我用如下列子证明
main()
{
char array[12]="/0";
array[5]='b';
printf("string=%s",array);
}
结果:string=
因为array[0]就是NULL,所以字符串输出遇到'/0'就停止了。
再来一个证明
main()
{
char array[12]="/0";
array[5]='b';
array[0]='a';
printf("string=%s",array);
}
结果为 string=a
好,下面讨论定义数组时立即初始化的必要性
main()
{
char array[6];
array[0]='a';
array[1]='b';
array[2]='c';
array[3]='d';
array[4]='e';
array[5]='/0';
printf("string=%s",array);
}
结果输出 string=abcde
反例:
main()
{
char array[6];
array[0]='a';
// array[1]='b';
// array[2]='c';
// array[3]='d';
// array[4]='e';
// array[5]='/0';
printf("string=%s",array);
}
依次注释掉array[1]到array[5],查看每次输出结果都不一样,在被注释掉的数组元素上的值不可估。
我认为 输出的是这些变量在内存地址里的原值,所以初始化是很必要的,否则不可估的变量内存原值会对
我们造成伤害。
所以这句话 char array[12]="/0";是相当重要的,还有同列 char *point=NULL;
另外延伸一个数组名和指针的问题
数组名和指针都表示地址,但是你可以把数组名所表示的首地址赋给指针,但是不能把指针赋给数组名首地址
例如
main()
{
char array[2] , *point;
/* correct */
point=array;
/* error */
array=point;
}
这就像穿衣服,指针想穿哪件穿哪件,数组名只能等着被人穿。