因为我是C语言的新手。
void main()
{
char *p;
int a=-22;
p=(char *)&a;
*p=0;
printf("%d",a);
}
当我执行此代码时,我输出为-256。 当我以%c格式打印时,我什么也没得到,当我将* p值更改为其他东西时,它会提供其他输出。
当我们执行此操作时输出是什么以及为什么?
答案 0 :(得分:3)
赋值*p = 0;
修改a
的第一个字节(因为p
是指向char
的指针,即指向单字节值的指针,{ {1}}仅更改该单字节值,但*p
指向p
的开头,因此a
是*p
的第一个字节。
很可能你的计算机使用整数的小端表示和负整数的二进制补码。这就是为什么32位(4字节)整数a
( - 22)在内存中表示为a
的原因。在0xEA 0xFF 0xFF 0xFF
之后,*p = 0;
看起来像a
(注意第一个字节的更改),这对应于整数-256
答案 1 :(得分:0)
您可以尝试理解: -
%d
用于int说明符
%c
用于字符
%p
用于指针
现在,在您的计划中,当您分配*p = 0;
时,它会修改a
的第一个字节,这就是您获得-256
的原因,因为它被表示为0x00 0xFF 0xFF 0xFF