鱼C论坛

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

求问二级指针的问题

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

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

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

x
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int a=99;
  5.         int *pa=&a;
  6.         int **ppa=&pa;
  7.         printf("%0x\n",a);
  8.         printf("%0x\n",pa);
  9.         printf("%0x\n",*pa);
  10.         printf("%0x\n",ppa);
  11.         printf("%0x\n",*ppa);
  12.         printf("%0x\n",**ppa);
  13. }
复制代码

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

就是还想问ppa和pa都是地址,那我可以进行ppa=pa;
这样的赋值吗?
我试了一下这样,编译没错误,运行就出现:停止工作这样的提示框?
请问这是为什么呢?
QQ截图20161211212641.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-12-12 16:49:56 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a = 99;
  5.         int *pa = &a;
  6.         int **ppa = &pa;

  7.         ppa = pa;

  8.         printf("%0x\n", a);
  9.         printf("%0x\n", pa);
  10.         printf("%0x\n", *pa);
  11.         printf("%0x\n", ppa);
  12.         printf("%0x\n", *ppa);
  13.         //printf("%0x\n", **ppa);

  14.         return 0;
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int main()
  3. {
  4.         int a = 99;
  5.         int *pa = &a;
  6.         int tmp[100];
  7.         int **ppa = &pa;

  8.         printf("%0x\n", a);
  9.         printf("%0x\n", pa);
  10.         printf("%0x\n", *pa);
  11.         printf("%0x\n", ppa);
  12.         printf("%0x\n", *ppa);
  13.         printf("%0x\n", **ppa);

  14.         return 0;
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

请问为什么不输出**ppa,程序就可以运行了呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


我的可以运行,你自己结束时没返回
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

内存以栈形式从高到低给变量分配空间,最后在从低到高释放掉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这是编译器决定的
小甲鱼最新课程 -> https://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的地址取值?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

还没学过汇编。。。虽然看不懂 但是还是谢谢你! 感谢~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 04:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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