【问题标题】:C - Using a char pointer to print int value, not getting expected resultC - 使用 char 指针打印 int 值,没有得到预期的结果
【发布时间】:2016-03-07 03:47:48
【问题描述】:

我试图了解指针的工作原理。我创建了一个int 值并创建了一个char 指针指向它。

打印char指针指向的地址内容时,没有得到预期的结果。

如果 char 指针指向 256,我希望该地址的内容返回 0,因为 (256)10 = ( 0000000100000000)2。因为 char 指针指向一个字节,所以它会返回前 8 位,它们是零。

但它返回 -1

这是我的代码

#include <stdio.h>

int main()
{
    int y = 256;
    char *p = (char *)&y;

    // returns Value -1
    printf("Value %d \n", *p);

    return 0;
}

【问题讨论】:

  • @chux 可以通过字符指针访问任何对象,而不会违反严格别名。这不是 UB。
  • @Rafael 你确定你得到 -1 作为 256 的输出,而不是 255?
  • @chux 对于 y = 256,我得到“值 0 256”。但是对于 y = 255,我得到“值 -1 255”
  • 这与您的原始帖子不同,该帖子包含 y=256 和“它返回 -1”。现在答案很简单。代码只是将y 的最低有效字节打印为signed char
  • @chux 但是为什么 255 仍然给我 -1 ?即使我正在打印y

标签: c pointers memory char integer


【解决方案1】:

但是为什么 255 仍然给我 -1 ?即使我在打印 y

y 为255 时获取Value -1 255 是有意义的。 p 指向一个字节,在二进制中看起来像 11111111*p 是一个有符号字符,%d 打印一个有符号值,这就是它打印 -1 的原因。 – dbush

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多