我在 C 中有以下程序:
main() {
int arr[5]={100,200,300};
int *ptr1=arr;
char *ptr2=(char *)arr;
printf("%d\n",sizeof(int));
printf("%d %d",*(ptr1+2),*(ptr2+4));
return 0;
}
其输出如下:
4
300 -56
请解释最后的输出。根据我的理解,最后的输出应该是 44 而不是 -56。
最佳答案
您正在挑选 arr[1]
的第一个八位字节。您的机器是 4 字节 int
的小端,因此组成 arr[1]
的 4 个八位字节是,写为十进制:
200, 0, 0, 0
所以您将八位字节 200 解释为 char
。您的 char
已签名,您的机器使用 two's complement .
200的二进制表示是
11001000
由于设置了最高有效位,因此当作为有符号值查看时,这是一个负数。因此,为了计算出负值的大小,我们将位取反,然后加一。
00110111
是十进制的 55。因此输出值是-56。
关于c - 数组输出指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26159845/