在下面的程序中,我希望只有指针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
答案 0 :(得分:1)
第一个字节碰巧有位的表示,当被解释为char类型的值时,将产生一个小的负值。然后在将此类型传递给printf时将其提升为int类型。然后printf重新解释int类型的传递变量的位,类型为unsigned int。这些比特恰好代表了一个很大的价值。
使用说明符transpose
打印char类型。
但是,您尝试打印字节而不是可打印字符,因此应使用unsigned char类型和说明符c
。
答案 1 :(得分:-1)
您正在将i显示为无符号整数,以便它将考虑变量&#39; i&#39;作为一个很大的价值。您应该使用外部类型转换,同时将i值显示为(char)* J