求问二级指针的问题
#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;
这样的赋值吗?
我试了一下这样,编译没错误,运行就出现:停止工作这样的提示框?
请问这是为什么呢? #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;
}
请问为什么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-12 16:49
呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么? 人造人 发表于 2016-12-12 16:49
请问为什么不输出**ppa,程序就可以运行了呢? 本帖最后由 zzzz76 于 2016-12-14 11:34 编辑
阿撩 发表于 2016-12-13 21:53
请问为什么不输出**ppa,程序就可以运行了呢?
我的可以运行,你自己结束时没返回 阿撩 发表于 2016-12-13 21:51
呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么?
内存以栈形式从高到低给变量分配空间,最后在从低到高释放掉 阿撩 发表于 2016-12-13 21:51
呃。。。那为什么不是pa在前呢? pa不是比ppa先定义么?
这是编译器决定的 阿撩 发表于 2016-12-13 21:53
请问为什么不输出**ppa,程序就可以运行了呢?
因为pa是一级指针
看图,mov ecx, dword ptr 执行完,ecx已经是0x63(99)了,再去0x63的地址取值?
人造人 发表于 2016-12-14 12:30
因为pa是一级指针
看图,mov ecx, dword ptr 执行完,ecx已经是0x63(99)了,再去0x63的地址取值 ...
还没学过汇编。。。虽然看不懂 但是还是谢谢你! 感谢~~~
页:
[1]