阿撩 发表于 2016-12-11 21:33:10

求问二级指针的问题

#include <stdio.h>
int main()
{
        int a=99;
        int *pa=&a;
        int **ppa=&pa;
        printf("%0x\n",a);
        printf("%0x\n",pa);
        printf("%0x\n",*pa);
        printf("%0x\n",ppa);
        printf("%0x\n",*ppa);
        printf("%0x\n",**ppa);
}

请问为什么ppa输出的地址比pa的地址要前进一格呢?
运行如图

就是还想问ppa和pa都是地址,那我可以进行ppa=pa;
这样的赋值吗?
我试了一下这样,编译没错误,运行就出现:停止工作这样的提示框?
请问这是为什么呢?

人造人 发表于 2016-12-12 16:49:56

#include <stdio.h>

int main()
{
        int a = 99;
        int *pa = &a;
        int **ppa = &pa;

        ppa = pa;

        printf("%0x\n", a);
        printf("%0x\n", pa);
        printf("%0x\n", *pa);
        printf("%0x\n", ppa);
        printf("%0x\n", *ppa);
        //printf("%0x\n", **ppa);

        return 0;
}

人造人 发表于 2016-12-12 16:52:12

请问为什么ppa输出的地址比pa的地址要前进一格呢?
因为ppa 和pa的定义紧挨着
#include <stdio.h>

int main()
{
        int a = 99;
        int *pa = &a;
        int tmp;
        int **ppa = &pa;

        printf("%0x\n", a);
        printf("%0x\n", pa);
        printf("%0x\n", *pa);
        printf("%0x\n", ppa);
        printf("%0x\n", *ppa);
        printf("%0x\n", **ppa);

        return 0;
}

阿撩 发表于 2016-12-13 21:51:11

人造人 发表于 2016-12-12 16:49


呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么?

阿撩 发表于 2016-12-13 21:53:57

人造人 发表于 2016-12-12 16:49


请问为什么不输出**ppa,程序就可以运行了呢?

zzzz76 发表于 2016-12-14 11:29:15

本帖最后由 zzzz76 于 2016-12-14 11:34 编辑

阿撩 发表于 2016-12-13 21:53
请问为什么不输出**ppa,程序就可以运行了呢?

我的可以运行,你自己结束时没返回

zzzz76 发表于 2016-12-14 12:10:45

阿撩 发表于 2016-12-13 21:51
呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么?

内存以栈形式从高到低给变量分配空间,最后在从低到高释放掉

人造人 发表于 2016-12-14 12:22:06

阿撩 发表于 2016-12-13 21:51
呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么?

这是编译器决定的

人造人 发表于 2016-12-14 12:30:07

阿撩 发表于 2016-12-13 21:53
请问为什么不输出**ppa,程序就可以运行了呢?

因为pa是一级指针

看图,mov ecx, dword ptr 执行完,ecx已经是0x63(99)了,再去0x63的地址取值?

阿撩 发表于 2016-12-14 20:46:19

人造人 发表于 2016-12-14 12:30
因为pa是一级指针

看图,mov ecx, dword ptr 执行完,ecx已经是0x63(99)了,再去0x63的地址取值 ...

还没学过汇编。。。虽然看不懂 但是还是谢谢你! 感谢~~~
页: [1]
查看完整版本: 求问二级指针的问题