指针地址值的变化

时间:2012-04-28 21:24:44

标签: c pointers

我测试了一个下面写的小程序。我的问题是为什么指向一个值的指针与指向第一个指针的指针之间存在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

1 个答案:

答案 0 :(得分:4)

这只是编译器选择的堆栈布局,例如。这可能是出于对齐的原因。事情很可能仍然适用于其他布局。

旁注,您应该使用%p打印地址。