#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;
}
我无法掌握输出是513还是什至依赖于机器的事实?我可以感觉到类型转换在发挥重要作用,但是幕后发生了什么,有人可以帮助我想象一下这个问题吗?
最佳答案
除了先前的答案,让我为您分解一下:
#include<stdio.h>
int main()
{
int a; //declares an integer called a
char *x; //declares a pointer to a character called x
x = (char *) &a; //points x to the first byte of a
a = 512; //writes 512 to the int variable
x[0] = 1; //writes 1 to the first byte
x[1] = 2; //writes 2 to the second byte
printf("%d\n",a); //prints the integer
return 0;
}
请注意,我写了第一个字节和第二个字节。根据平台的字节顺序和整数的大小,您可能不会获得相同的结果。
让我们看一下 32位或 4字节大小的整数的内存:
小端系统
first byte | second byte | third byte | forth byte
0x00 0x02 0x00 0x00
现在将1分配给第一个字节,将2分配给第二个字节使我们有了:
first byte | second byte | third byte | forth byte
0x01 0x02 0x00 0x00
注意,第一个字节已更改为
0x01
,而第二个字节已更改为0x02
。内存中的新数字等效于 little endian 系统上的
513
。大端系统
让我们看看如果您在大端字节平台上尝试此操作会发生什么:
first byte | second byte | third byte | forth byte
0x00 0x00 0x02 0x00
这次将1分配给第一个字节,将2分配给第二个字节使我们有了:
first byte | second byte | third byte | forth byte
0x01 0x02 0x02 0x00
相当于
16,908,800
作为整数。关于c - 带类型转换的C指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43664832/