Ihre Schleife greift auf 32 Adressen zu n = 0; n < 32. Unter der Annahme, dass Integer 4 Byte auf Ihrem System belegen, greifen Sie nur auf Bytes zu, die das 4. Mal den Anfang von 4-Byte-Ganzzahlen bilden.
Dieser Code wird für jede Schleife um 4 erhöht.
#include<stdio.h>
int main()
{
int a[8]={1,2,3,4,5,6,7,8}, i;
char* p;
p=(char*)a;
for(i = 0; i < 32; i += 4) {
printf("%d\t",*(p+i));
}
printf("\n");
return 0;
}
der Schleifensteuerung wäre stabiler Verwendung dieser
for(i = 0; i < 32; i += sizeof(int)) {
da sie die Schrittweite, was Größe ‚Integer‘ ist auf der Maschine, auf es läuft gesetzt würde.
Es gibt andere Probleme, einschließlich Ihrer Array-Zuweisung ist mehr als die zugewiesene Array-Größe.
Gab es einen Grund für die nicht nur die Array-Elemente zugreifen:
#include<stdio.h>
int main()
{
int a[8]={1,2,3,4,5,6,7,8}, i;
for(i = 0; i < sizeof(a)/sizeof(a[0]); i ++) {
printf("%d\t", a[i]);
}
printf("\n");
return 0;
}
Dies kann Ihnen helfen, zu sehen, wie die ganze Zahl gespeichert ist. Da es sich um einen vorzeichenbehafteten Wert handelt, handelt es sich wahrscheinlich um eine Zweierkomplement-Notation.
#include<stdio.h>
int main()
{
int a[8] = {1, -2147483647 ,3,4,5,6,7,8}, i;
char* p;
p=(char*)a;
for(i = 0; i < 32; i++) {
printf("%d\t",(*p));
p++;
if (i%4 == 3) printf("\n");
}
return 0;
}
führen Sie es erneut, nachdem die negative Zahl Erniedrigen (die größte negative Zahl für eine 32-Bit-Ganzzahl mit Vorzeichen) Die \ t und das zusätzlichen printf line-Hilfe-Format der Ausgabe, die es leichter zu folgen. Beachten Sie auch, dass p erst nach dem Drucken erhöht wird. In Ihrem ursprünglichen Code haben Sie über das Ende der im Array verwendeten Bytes hinaus zugegriffen.
Auch Ihre erste printf Linie entfernen, da es die Ausgabe verwirrt
Es ist der Wert der Ganzzahl gefolgt von drei Nullen, tatsächlich. –
Ich frage mich, wie ein 32-Bit-Int Byte für Byte im Speicher aussieht? –
Hinweis: Trotz der Besetzung in Zeile 6 enthält 'a' noch int-Werte, keine char- –