c - 数组输出指针

标签 c arrays pointers

我在 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/

相关文章:

ios - 如何从 uint8_t 数组获取 "remove"数组元素或 ge 范围?

c - 此代码是否正确?如果是,则 malloc 已经将地址分配给 name[i] 变量,那么为什么使用 strcpy?

C++ boost共享数组交换指针(简单问题)

c++ - 哪种音频文件格式最容易操作?

C. 我的数字以相反的顺序打印(英文)?我怎样才能解决这个问题?

c - char *str 为 null 和 str[0] == '\0' 有什么区别

arrays - 你如何打破一组 n 的数组

arrays - 如何将两个数组与拼接结合起来

c - 指向固定地址的函数指针

c - 如何在 Windows 上编译 memcached?