在C语言中类型转换时的指针概念

时间:2013-10-27 19:30:36

标签: c pointers

因为我是C语言的新手。

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

  }

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

当我们执行此操作时输出是什么以及为什么?

2 个答案:

答案 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