指针声明

时间:2016-12-24 07:50:15

标签: c pointers type-conversion

在下面的程序中,我希望只有指针i读取变量j的前一个字节。但它作为输出给出了巨大的价值。请让我知道您的观点。

#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;
}

输出:

  

i的值= 4294967295 INT的最大值= 2147483647

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-1)

您正在将i显示为无符号整数,以便它将考虑变量&#39; i&#39;作为一个很大的价值。您应该使用外部类型转换,同时将i值显示为(char)* J