c语言字符串问题

c语言字符串问题设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( B ) (A) c=*p1+*p2; (B) p2=c; (C) p1=p2; (D) c=*p1*(*p2); D选项错误问题能详细解释下吗

这个题错误的是B选项。p2是一个char*型或const char*型,而c是一个char型,很显然这两者之间无法相互转换。追问

D选项能详细解释下吗

追答

D选项表示将p1指向的字符串的首字符和p2指向的字符串的首字符相乘。

追问

字符相乘是什么意思

例如A*B

追答

两个字符相乘等价于将它们的ASCII码相乘。

追问

但是乘出来没有这个acll呢

能够赋值吗

1236

例如像1236

追答

乘法结果发生溢出是一个未定义行为,通常发生上溢后会变成下界,例如char型最大值127,再+1后会变成-128。

追问

能通俗些吗

追答

1236除256余212,212超过了char型上界发生上溢减256得-44,所以char c=1236等价于char c=-44。

追问

再问下-44有这个字符吗

追答

负数字符表示扩展字符集,需要和它后面的一个字节一起解释成一个ANSI字符。

负数字符表示扩展字符集,需要和它后面的一个字节一起解释成一个ANSI字符。

追问

也就是溢出可以转化为另一种形式赋值给他

追答

是作为扩展ASCII字符集(ANSI)解释。你可以自己了解一下什么是ANSI编码。GBK/GB2312就是中国本地化的ANSI字符集。

温馨提示:答案为网友推荐,仅供参考
相似回答