Im folgenden Programm würde ich erwarten, dass nur das erste Byte der Variablen i
vom Zeiger j
gelesen wird. Aber es gibt einen großen Wert als Ausgabe. Bitte lassen Sie mich Ihre Meinung wissen.Falscher Datentyp in der Zeigerdeklaration
#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;
}
Ausgang:
Wert von i = 4294967295 Max Wert von INT = 2147483647
2147483647 (0x7FFFFFFF), '* j' = 0xFF (-1) (Little-Endian),' -1' ==> unsigned (32bit) ==> 4294967295 – BLUEPIXY
Dies liegt daran, dass 'char' Implementierung' ist signiertes Zeichen ". Also, damit es so funktioniert, wie Sie es erwarten würden, wie 'printf (" Wert von i =% u \ n ", (unsigniertes Zeichen) * j);'. – BLUEPIXY
In anderen Umgebungen kann 'char' in' unsigned char' implementiert werden. – BLUEPIXY