老K,我没有ANSI C89 和 C99的说明,最好能发个英文版本上来看看
ChenMo关于1,2,4的解释没错
淘宝杜琨
to Knocker
我认为,我已经在"原因2. 任何整数在运算的过程中都将被视为int型!"这一句中说明了隐含int规则了
'a'如果不进行变量赋值char a='a'的话,默认类型int
'ab'和'abcd'分别在16位和32位中是合法的那是因为他们采用的寄存器是16位的和32位的,一旦写入内存还是得按照预先声明的格式 (''为字符char类型) 进行
char a='aa',*p=&a;
printf("%c,%c",*p,*(p+1));
很明显的,*(p+1)的输出不会是a
所以这里的问题不是你所说的多字节字符常量的原因
结果是1的
char a='a';
printf("%d",sizeof a);//因为char本来就规定为8个字节
这个是一定的,不管你的编译器是什么牌子
用
printf("%d",sizeof 'a');
得2或者4的朋友,我认为这里是由C语言C89标准默认int规则导致的,而在不同的编译器中,int的大小是不同的故得出2或者4
但是我觉得得2的朋友比较多,因为C89的C编译器大多是16位的
但是在c99中废除的默认int规则,也就是说'a'的长度在C99中是必须为1的,从'aa'开始到'aaaa'才被编译器强制转换为int类型所以'a'还是会被认为是char类型,sizeof的结果自然为1