我对C中的指针进行了一些回顾,而且我遇到了一些我遇到的代码时感到困惑。我是在做qeeksquiz.com/pointers
测验复习,而我整个这一段代码来:关于机器相关指针值的困惑
#include<stdio.h>
int main()
{
int a;
char *x;
x = (char *) &a;
a = 512;
x[0] = 1;
x[1] = 2;
printf("%d\n",a);
return 0;
}
,当我遇到x = (char *) &a
来到我有点糊涂了。我知道x是一个指针,它包含a的地址,但当我们指定x[0] = 1
和x[1] = 2;
时,答案在打印时为513.答案说明它如何依赖于我们正在使用的机器以及小端机器改变它如何读取二进制文件。我完全困惑于我们如何从512到513.我猜这是因为x [0] = 1,但我不是100%确定。有人可以帮忙解释一下吗?如果我们分配了x[0] = 2
,那么变化的值是多少?
感谢您的帮助!
INT存储为一个字节序列。这里只有2个字节被初始化:然后将值计算为x [0] + 256 * x [1] = 1 + 256 * 2 = 513.如果它是一个不同的endian机器,那么(假设int使用2个字节,这并不总是正确的),这可能是另一种方式:x [1] + 256 * x [0] = 2 + 256 = 258。 – Ashalynd
你从哪里获得256乘以x [1]? – user1871869
256是2 ** 8,而8是一个字节中的位数。 – Ashalynd