【发布时间】: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