注册 登录
编程论坛 C++教室

关于数组及字符数组

tfg0116 发布于 2008-10-28 20:03, 832 次点击
char ch[] = "abc";与char ch[] = {'a','b','c','\0'};的区别?
char *ch = "abc";与char ch[] = "abc";的区别?
int ia[] = {1,2,3};cout<<ia;输出的是ia的地址,而char ch[] = {'a','b','c','\0'};cout<<ch;却是"abc",why?
如果char ch[] = "abc";与char ch[] = {'a','b','c','\0'};没有'\0'的话,cout<<ch;输出的结果却不可想像,why?
请大家指教
5 回复
#2
newyj2008-10-28 20:59
只有char 类型的数组 输出它的数组名就可以输出整个数组
cout在输出char类型数组时 是要判断'\0' 如果去掉的话 那它会一直判断 等到 有'\0'的时候
#3
haiyungood2008-10-28 21:53
char ch[] = "abc";是以字符串赋值的,char ch[] = {'a','b','c','\0'};是以字符赋值的,两者是相同的在给字符数组赋值时。
#4
haiyungood2008-10-28 22:14
char ch[] = "abc";是以字符串赋值的,char ch[] = {'a','b','c','\0'};是以字符赋值的,两者是相同的在给字符数组赋值时。
#5
BBGASJ2008-10-28 22:25
个人人为你需要明白以下3个概念:
1,要表示一个字符串需要直到它首字符的地址和末字符的地址,而C风格字符串采用的方法是通过字符数组来实现,用数组名或数组第一个元素的地址表示首字符的地址,而用'\0'字符表示末字符的地址,所以只要定义式能体现出这两点,C风格字符串就定义成功了。
2,"abc"就是C风格字符串的一个实例,它会自动在abc后加一个空字符,即代表末字符的地址,而"abc"整个表达式返回的是‘a’的地址,即首字符的地址。
3,<< 操作符在类中定义了操作符重载,即对不同的操作数采取不同的操作。所以当左操作数为一个ostream对象,右操作数为一个字符指针时它将采取以下操作:通过字符指针找到字符串的首字符,输出到ostream中,然后依次输出首字符后的字符,直到遇到'\0'字符位置,这样一个字符串就输出完毕。
#6
BBGASJ2008-10-29 06:57
char *ch = "abc";与char ch[] = "abc";还有一个区别:因为"abc"是个字符串常量,所以把他赋给指针后不能通过指针来修改他即不能有ch[0]='b'这样的语句出现,但数组可以修改。
1