69,377
社区成员
发帖
与我相关
我的任务
分享
unsigned short a = 0x0000;
假设a在内存中占据的空间为:0000,0001
所放数据为: 0x00 0x00
当传进fun函数的时候,因为由unsigned short*提升为unsigned int*,所以a在函数中的内存空间解释为:
0000 0001 0002 0003
0x00 0x00 0x00 0x00
当给a赋值10的时候,变为:
0000 0001 0002 0003
0x0A 0x00 0x00 0x00
函数调用结束以后,a还原为unsigned short,取前2个字节作为它的值,即0x0A00,因此可以打印出10 10 000a
unsigned short a = 0x0000;
也假设a在内存中占据的空间为:0000,0001
所放数据为: 0x00 0x00
当传进fun函数的时候,因为由unsigned short*提升为unsigned int*,所以a在函数中的内存空间解释为:
0000 0001 0002 0003
0x00 0x00 0x00 0x00
当给a赋值10的时候,因为是大端环境,所以低字节放在内存中的高地址变为:
0000 0001 0002 0003
0x00 0x00 0x00 0x0A
函数调用结束以后,a还原为unsigned short,因为a的地址指向0000,故只能取前2个字节作为它的值,即0x0000,而将后两个字节0x000A丢弃,则此时a的值变为0,因此可以打印出0 0 0000
如果把fun函数的参数改变为unsigned short*,就本题来说,结果也就一样了