

这两种代码为什么输出结果不同,定义变量类型和等号后面的值没有关系吗?
关注首先要知道,char,int,long在底层本质上都是存储了一个数(二进制),char与其他两者不同的在于,它可以将一个数(ASCII)解释为字符,从而以%c的形式打印出来。
因此在你的例子中,直接将十进制值1赋值给char后,char在底层保存的就是二进制值1。此时printf使用转换说明%d打印,表示将二进制值1解释为一个十进制数,因此直接输出1,如果你此时使用转换说明%c,则代表把二进制值1解释为一个ASCII码,输出其对应的字符,即一个不可见字符SOH。
当你使用scanf加转换说明%c读取输入1时,1会被解释为一个字符,因此变量c保存的是其ASCII码,即二进制值00110001,因此可以当你使用转换说明%d打印时,该二进制值会被解释为一个十进制数,也就是49。
如还有不懂可以追问,如问题解决请采纳。