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