c语言 位域 以下两个代码对应的程序为啥会输出不同的结果 不应该都是0xld嘛(在小端的机器上)

典型的不正常初始化由垃圾数据引起的问题。栈上变量不初始化会有垃圾数据。而全局变量所在的位置通常是初始化为0的。 你的位域并没有用满char所允许的8位,因此不管你怎么给位域赋值,c的最高位符号位是不会变的。第一段里你在位域赋直前打印下c,看看是不是负数?
■网友
是局部变量和全局变量初始化的问题。全局变量会被自动初始化为0,局部变量则不会。当r是局部变量的时候,r.c有两个位是没有赋值的。


    推荐阅读