-1

因为我是 C 语言的新手。

 void main()
 {
      char *p;
      int a=-22;
      p=(char *)&a;
      *p=0;
      printf("%d",a);

  }

当我执行此代码时,我得到的输出为 -256。当我以 %c 格式打印它时,我什么也得不到,当我将 *p 值更改为其他东西时,它会给出其他一些输出。

当我们执行这个时,输出是什么,为什么?

4

2 回答 2

3

赋值*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

于 2013-10-27T19:42:02.517 回答
0

您可以尝试理解:-

%d用于 int 说明符

%c是为了性格

%p用于指针

现在在您的程序中,当您分配时,*p = 0;它会修改第一个字节,a这就是您得到的原因,-256因为它表示为0x00 0xFF 0xFF 0xFF

于 2013-10-27T19:32:17.710 回答