C语言字符型赋值问题
本帖最后由 every-day 于 2018-8-15 09:07 编辑一度困惑后,选择了一个个尝试。
发现整形可以整形输出——输出结果对应整形,也可以字符型输出——输出结果对应相应ASCII值,
反之字符型也是如此。
字符型赋值只接受一个字符或ASCII,ASCII值的返回范围是0-255,
直接赋值数字就可以不必加单引号。一个字符的赋值——比如要赋值\给ch,必须写成ch=‘\\’。
然后我尝试了
char o,p,q;
o=a;p='/b';q='\c';
printf("%c,%c,%c\n",o,p,q);
发现可以正常输出字符abc,请问这是怎么一回事??? 很多字符的转义就等于它自身 学习C语言的话,建议你仔细思考一下这些数据类型的本质。
……
整数型、字符型分别占4个字节、1个字节。
o=a;p='/b';q='\c';这段代码个人觉得不符合语法,哪怕能够如预期一样输出,也不符合约定俗成的代码规范,不便于阅读和他人理解。
一般对编译器而言,字符型数值的范围本身就是0-254,所以你是可以以ASCII码数值的形式直接赋值,输出的是字符还是数字,取决于printf的占位符是%c还是%d。
\这个符号为转义字符,你可以自己详细查一下,不太好解释。
直接赋值数字确实不需要加单引号,如果加单引号的话,代表的是字符型数字,比如'1'对应的就是ASCII码的31了,而不加单引号的1为ASCII码。
TyCk 发表于 2018-8-15 09:20
学习C语言的话,建议你仔细思考一下这些数据类型的本质。
……
整数型、字符型分别占4个字节、1个字节。
...
所以 '/b' 即便可以输出字符b,也是不符合语法的? every-day 发表于 2018-8-15 09:22
所以 '/b' 即便可以输出字符b,也是不符合语法的?
讲真,不知道''/b’代表啥意思,'\'为转义字符,‘\b’代表退格,但是没见过‘/b’。
就赋值而言,‘/b’应当是两个字符吧,char只能赋一个字符,所以有些混乱呐{:10_245:} TyCk 发表于 2018-8-15 09:33
讲真,不知道''/b’代表啥意思,'\'为转义字符,‘\b’代表退格,但是没见过‘/b’。
就赋值而言,‘/b ...
{:10_266:}还是谢谢你的解答 TyCk 发表于 2018-8-15 09:33
讲真,不知道''/b’代表啥意思,'\'为转义字符,‘\b’代表退格,但是没见过‘/b’。
就赋值而言,‘/b ...
o=a;p='/b';q='\c';r='d';s='\acde';
结果是:a,b,c,a,b,c,d,e.
可能是因为字符型,只能写入一个,所以前面的都覆盖掉了吧,就像/b结果是b。
还有,请问,a可以不加单引号直接赋值吗?
o=a;p='/a';q='\\a';r='a';s='\csda';
我验证过结果都为a 本帖最后由 TyCk 于 2018-8-15 13:39 编辑
every-day 发表于 2018-8-15 12:22
o=a;p='/b';q='\c';r='d';s='\acde';
结果是:a,b,c,a,b,c,d,e.
最好不要这样,赋值的话,还是按照一般语法要求,例如char型变量 cZ = ‘a’;
不然,不同编译器可能不一样,容易出现各种莫名其妙的问题。
另外,直接写ASCII码的话,不要加单引号,前面的回复也提过了,有没有单引号,意义是不同的。
我觉得,可能也是被覆盖掉了,或者内存地址的存放有些问题,然后就相当于写入最后一个。
有时间了,你也可以尝试调试一下,研究一下赋值的过程。
页:
[1]