69,369
社区成员
发帖
与我相关
我的任务
分享
char c= -1;
//c -> 11111111
//char是8位
这里猜测%x应该是将char或者unsigned char转化为int(32位)然后进行输出,所以显示的是ffffffff,而%d应该是没有进行相应的转化直接输出了
具体的需要自己查一下,毕竟我不会去关注这种转化的,感觉不实用,有可能导致其他问题。
第二题涉及结构体的内存对齐
//sizeof char -> 1
//sizeof int -> 4
//sizeof short -> 2
//但是sizeof node -> 12
//为什么是12,因为结构体的顺序为char,int,short,因为要对齐,你不能让int跟char对齐,数据必须保持完整,所以char应该要占4位,跟int一致,同理,short也需要对齐int
//内存格式应该是01 00 00 00-02 00 00 00-03 00 00 00,01后面的数据是无意义的,03 00后面的数据也是无意义的
//当然如果你换一个位置结果就会不同了,比如node的顺序为int,char,short,那么sizeof node -> 8,具体的自己搜了,以上只是我自己记忆中的理解
//这就是内存对齐的结果
//同理sizeof n -> 8
//初始化后,我们就可以直接将a的内存写出来了,这里我就不写了
//01 00 00 00-02 00 00 00 00-03 00 00 00-04 00 00 00-05 00 00 00-06 00 00 00
//char*表示一位一位的移动,所以(char*)a + 2*8 的指针指向05,
//然后又把指针强制转换为int类型,所以指向的就是05 00 00 00
//最后结果就是把5设置为100了
第四题考的是long和int在内存中的存储方式
//没啥好说的内存应该是78 69 79 6f 75 4c 69 6e-75 78 00 00
//倒着存的
//&num->取num的首地址,(char*)&num,取num的首地址,强制转换为char*的类型,+i表示向后偏移多少个字节量,比如+2就应该指向79
ps:linux上的c编程不熟,不保证一定对