このコードの場合
#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;
}
この出力を取得しています
2293516 2293512 2293508 2293504 2293500 2293496 2293492 2293488 2293484 2293480 2293476
2293516 2293512 2293508 2293504 3739288 3739320 3739336 2293488 2293484 2293480 2293476
今まではすべてクリアですが、コメントするとスターラインの出力は
2293520 2293516 2293512 2293508 4525720 4525752 4525768 2293504 2293500 2293496 2293492
私の質問は、この場合、メモリ位置が隣接していない理由です。最初のケースの2行目では、値は通常の差で4バイト、つまり516、512、508、504、次に3つの場所、次に488、484、480 ...でしたが、2番目のケースでは値は520、516、512、508です。 、次に3つの場所、次に504、500、496。なぜここで508の後の次の値は504であるのに、492である必要があるのでしょうか。ここにprintfの役割はありますか?