包含指针的C程序输出
我想输出是300,但答案是556。有人能解释一下吗。二进制的整数值300是:包含指针的C程序输出,c,pointers,output,C,Pointers,Output,我想输出是300,但答案是556。有人能解释一下吗。二进制的整数值300是:00000001 00101100。 它存储在内存中为:00101100000001 表达式*++ptr=2的结果使内存表示为:000000 10 00101100 因此,对应于它的整数是00000010 00101100=>556如果它是小端,它看起来像 int main() { int a = 300; char *b = (char *)&a; *++b = 2; printf
00000001 00101100
。
它存储在内存中为:00101100000001
表达式*++ptr=2
的结果使内存表示为:000000 10 00101100
因此,对应于它的整数是
00000010 00101100=>556
如果它是小端,它看起来像
int main()
{
int a = 300;
char *b = (char *)&a;
*++b = 2;
printf("%d ",a);
return 0;
}
“输出是300,但答案是556”是什么意思?如果运行程序,输出是什么?“答案”从何而来?你先解释一下为什么你认为这两个值是对的还是错的?你的好解释看起来像是在中间解释中转换了Endianness。我期望的是
00000010 00101100
而不是00101100000010
。
a = 0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 | 0010 1100
| |
MSB b<--points base address
LSB
a = 0000 0000 | 0000 0000 | 0000 0000 | 0000 0010 | 0010 1100 => 512 + 44 = 556
| |
b LSB