c - 指针声明中的错误数据类型

标签 c pointers type-conversion

在下面的程序中,我希望指针j 只读取变量i 的第一个字节。但它作为输出提供了巨大的值(value)。请让我知道您的看法。

#include <stdio.h>
#include <limits.h>
int main()
{
    int i = 2147483647;
    char *j;
    j = &i;
    printf("Value of i = %u\n", *j);
    printf("Max value of INT = %d\n", INT_MAX);
    return 0;
}

输出:

Value of i = 4294967295 Max value of INT = 2147483647

最佳答案

第一个字节恰好具有位表示,当被解释为 char 类型的值时,将产生一个小的负值。这个类型在传递给 printf 时被提升为 int 类型。然后 printf 将传递的 int 类型变量的位重新解释为 unsigned int 类型。这些位恰好代表一个很大的值。

char 类型使用说明符 c 打印。

但是您尝试打印一个字节,而不是可打印字符,因此您应该使用类型 unsigned char 和说明符 hhu

关于c - 指针声明中的错误数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41311434/

相关文章:

c - 在函数中查找数组长度

处理文件时的困惑

c++ - 在 C++ 中如何传递函数指针并在函数中进行比较?

ios - 在 Swift 中从 NSData 中提取结构

vba - 将 TextBox.Value 转换为 Double 到 VBA (Excel 2013)

通过取消引用其指针来计算数组的大小

c++ - 为什么库链接器标志有时必须在最后使用 GCC?

c++ - 在堆中创建一个函数指针数组

floating-point - 用极限分母使数有理化

javascript - jQuery data() 类型转换问题?