1

以下に記述されている小さなプログラムをテストしました。私の質問は、値へのポインターと最初のポインターへのポインターの間に12バイトの違いがあるのはなぜですか。しかし、他のポインターアドレスを見ると、8バイトの違いしかありません。毎回このプログラムを何度も実行しましたが、いつもこの違いがわかります。理由は誰か説明してもらえますか?よろしくお願いします。

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
        int val;
        int *ptr;
        int **ptrptr;
        int ***ptrptrptr;
        int ****ptrptrptrptr;
        int *****ptrptrptrptrptr;

        val=10;
        ptr=&val;
        ptrptr=&ptr;
        ptrptrptr=&ptrptr;
        ptrptrptrptr=&ptrptrptr;
        ptrptrptrptrptr=&ptrptrptrptr;

        printf("Value-%d\n",val);
        printf("Value address - %d\n",ptr);
        printf("Pointer address - %d\n",ptrptr);
        printf("Pointer Pointer Address -%d\n",ptrptrptr);
        printf("Pointer Pointer Pointer Address -%d\n",ptrptrptrptr);
        printf("Pointer Pointer Pointer Pointer Address -%d\n",ptrptrptrptrptr);

        return 0;
}

結果は次のとおりです。

Value-10
Value address - -1308521884
Pointer address - -1308521896
Pointer Pointer Address --1308521904
Pointer Pointer Pointer Address --1308521912
Pointer Pointer Pointer Pointer Address --1308521920
4

1 に答える 1

4

これは、コンパイラが選択したスタックレイアウトにすぎません。これは、配置上の理由による可能性があります。ほとんどの場合、他のレイアウトでも機能します。

ちなみに、%p住所の印刷にはを使用する必要があります。

于 2012-04-28T21:29:10.513 に答える