C语言中char的问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 04:36:21
想问一个简单的问题:
书上说的很清楚字符型char变量用来存储字符常量,而字符常量定义是值用单引号括起来的单个字符。且char型变量占据一个字节。
那么char name = '字符';该语句怎么解释?
1,‘字符’明显不是单个字符常量,怎么可以赋值给char?
2,’字符‘是汉字,一个汉字字符占两个字节,char占一个字节,怎么赋值???
望高手指点迷津。

1、首先,你不能用单引号,这里“字符“算是字符串了,而不字符,不能用单引号。
2、汉字占两个字节,即使char c = ‘字’这样也是不可以的
wchar_t 是可以完成的,但是用char数组也可以实现
用下面的代码:
char a[] = "字符";
printf("%s",a);

书上讲的是使用上的情况。 对char类型的情况介绍是正确的, 但是对字符常量书上忽略了一点技术细节。

字符常量这个东西的具体情况并不是像你理解的那样,这个东西的类型其实是 int而不是char。 你可以找个编译器试试看sizeof('a')的结果是4。

所以你写'字符'或者'1234'是可以的, 如果你写 '5字符'和'12345'就是不可以的。 这个状况某种角度来说就是为了以后的扩展, 比如从1字节的字符扩展到2字节或者4字节东西也可以作为一个字符输入(这在UTF32的情况下已经有了, c0x也加了这方面支持)

目前而言, char要跟字符常量分开来看, 字符常量不一定是char,也可能赋给 wchar_t或者以后的进一步扩展

用两个单引号括起来的字符字面量(而不是字符“常量”——标准中规定对字面量的改变的行为是未定义的——实际应该避免这种操作)的类型在C语言中并不是char或const char,而是int。(它的sizeof()的结果和sizeof(int)相同。)
在C++中它的类型是const char,是真正的单字节字符常量。
所以,char name = '字符';实际可以理解为char name = (char)'字符';,其中'字符'是一个int型的整数(具体是多少,得看编码和字节序- -事实上我懒得算。。。)。所以这行程序是没有语法错误的,不过这样写一般会引起一个编译警告。
对于一般的连续的多个字符处理,如前面几楼所说,适合采用字符串(字符数组静态存储或char*指针的动态存储)。
题外话:如LS所说,字符类型