鱼C论坛

 找回密码
 立即注册
查看: 2541|回复: 9

求问二级指针的问题

[复制链接]
发表于 2016-12-11 21:33:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
这样的赋值吗?
我试了一下这样,编译没错误,运行就出现:停止工作这样的提示框?
请问这是为什么呢?
QQ截图20161211212641.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-12 16:52:12 | 显示全部楼层
请问为什么ppa输出的地址比pa的地址要前进一格呢?
因为ppa 和pa的定义紧挨着
#include <stdio.h>

int main()
{
        int a = 99;
        int *pa = &a;
        int tmp[100];
        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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 21:51:11 | 显示全部楼层

呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 21:53:57 | 显示全部楼层

请问为什么不输出**ppa,程序就可以运行了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-14 11:29:15 | 显示全部楼层
本帖最后由 zzzz76 于 2016-12-14 11:34 编辑
阿撩 发表于 2016-12-13 21:53
请问为什么不输出**ppa,程序就可以运行了呢?


我的可以运行,你自己结束时没返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-14 12:10:45 | 显示全部楼层
阿撩 发表于 2016-12-13 21:51
呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么?

内存以栈形式从高到低给变量分配空间,最后在从低到高释放掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-14 12:22:06 | 显示全部楼层
阿撩 发表于 2016-12-13 21:51
呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么?

这是编译器决定的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-14 12:30:07 | 显示全部楼层
阿撩 发表于 2016-12-13 21:53
请问为什么不输出**ppa,程序就可以运行了呢?

因为pa是一级指针
无标题.png
看图,mov ecx, dword ptr [eax] 执行完,ecx已经是0x63(99)了,再去0x63的地址取值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-14 20:46:19 | 显示全部楼层
人造人 发表于 2016-12-14 12:30
因为pa是一级指针

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

还没学过汇编。。。虽然看不懂 但是还是谢谢你! 感谢~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 17:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表