char a[]={0,1,2,3}为什么是合法的,为什么不用引号

如题所述

char a[]={0,1,2,3}; 这是声明 a 是 char 型数组。花括号表示初始化的内容。也就是
a[0]=0;a[1]=1;a[2]=2;a[3]=3;
编译器 根据初始化内容,能算出数组需要多大来存放这些元素。
所以上面声明,等于声明了 char a[4]={0,1,2,3};
char 型实质上是1字节长度有符号整型,所以初值可以是0到正负127左右。

双引号括起的是字符串。
如果声明是 char a[]="0123"; 初始化的内容是字符串,字符串长度是4,另外要加1个字符串结束符,需要5个单元存放。编译器把它处理成: char a[5]="0123";

单引号括起的是字符常量
char a[4]={'0','1','2','3'}; 也可以,字符常量是1字节整型,数值等于字符的ASCII编码。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-17
那你说int a[]={0,1,2,3}合法不合法呢?如果这个合法,那么char a[]={0,1,2,3}有什么理由不合法呢?在32位平台下int和char的区别只是前者是32位后者是8位而已。你可能认为char就一定是字符串了吧?这里误会!C/C++的字符串用char型数组表示,而不是char型就只能表示字符串,它照样可以表示8位的整型数组——char a[]={0,1,2,3}就是一个具有4个8位整型元素的数组!
第2个回答  2013-12-17
你可以理解成给 char 变量赋值为什么可以是整数呢? 比如 char c = 0; 因为赋予的是对应的ASCII码的值,所以是可以的。本回答被提问者采纳
第3个回答  2013-12-17
请看书,C++55页追问

没学啊