为什么显示3个,你要知道2个方面:
1,字符串在内存中怎么表示的:s[5]="abcde",实际上在内存中存储的是“'a''b''c''d''e'0”共6个字节,以数据0结尾,显示字符串时碰到0时就表示字符串结束了,c[5]={'a','b','c','d','e'}是对每个数组元素赋初值,没有以数据0结尾的字符串结束标志。
2,变量在内存中存放的顺序,c编译器会把后定义的变量先分配地址,即变量c的内存地址小于变量s的地址,通过显示&c[0]、&s[0]也会发现这一规律,所以你定义的两个字符数组在内存中存放的顺序是先c后s,其中只有s有结束字符,所以你定义的两个变量在内存中的数据如下:
abcde abcde\0
c[5]
s[6]
有了上面的基础,就可以分析为什么显示3个了:
先printf("%s",s),显示abcde,碰到\0停止显示,第二次printf("%s",c),显示abcde,由于没有\0,所以继续往内存后面扫描,这时就碰到了存在c后面的s了,所以把变量s的字符又显示了一遍,直到碰到\0才停止显示。
如果你按下面的顺序定义变量,就看不到3个,而是看到在第二个abcde后面一大堆乱码
char c[5]={'a','b','c','d','e'};
char s[5]="abcde";
妹妹,那小狗狗好可爱哦,是真狗狗吧?
[
本帖最后由 wmf2014 于 2015-1-31 19:11 编辑 ]