Für diesen CodeGibt es eine Rolle von printf bei der Speicherzuordnung?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j, k, l;
int *ii = (int *)malloc(sizeof(int));
int *jj = (int *)malloc(sizeof(int));
int *kk = (int *)malloc(sizeof(int));
int m, n, o, p;
// Call below line as star line
printf("%u %u %u %u %u %u %u %u %u %u %u\n",&i,&j,&k,&l,&ii,&jj,&kk,&m,&n,&o,&p);
// Call below line as delta line
printf("%u %u %u %u %u %u %u %u %u %u %u\n",&i,&j,&k,&l,ii,jj,kk,&m,&n,&o,&p);
return 0;
}
Ich bekomme diese Ausgabe
2293516 2293512 2293508 2293504 2293500 2293496 2293492 2293488 2293484 2293480 2293476
2293516 2293512 2293508 2293504 3739288 3739320 3739336 2293488 2293484 2293480 2293476
Alles bis jetzt klar ist, aber wenn ich die Sterne-Line-Ausgang wird
2293520 2293516 2293512 2293508 4525720 4525752 4525768 2293504 2293500 2293496 2293492
Meine Frage ist, warum kommentiert In diesem Fall sind die Speicherorte nicht zusammenhängend. In der zweiten Zeile des ersten Falles hatten die Werte eine reguläre Differenz von 4 Bytes, dh 516, 512, 508, 504 und dann drei Stellen und dann 488, 484, 480 ... aber im zweiten Fall sind die Werte 520, 516, 512, 508 und dann drei Orte und dann 504, 500, 496. Warum ist hier der nächste Wert nach 508 504, während es 492 sein sollte? Gibt es hier eine Rolle von printf?
Haben Sie den Adressoperator im zweiten Druck für ii, jj, kk vergessen? – thumbmunkeys
@pivotnig: Nein, es ist beabsichtigt. –
Ich denke, es hängt nur von Ihrem Compiler ab. Müssen Sie das wirklich kontrollieren? –