zhihuzheye
发表于 2014-5-10 18:15:34
愚见,仅供参考!
请对照图片顺序往下查看...
1. 建议修正用语
*无“地址值”一说吧,“地址”这个概念还可以分的更小吗?
变量 变量的地址 地址中存储段内容
i 0012ff74 778899aa
p(非*p,int *是p的类型)
...
变量:有2样重要的东西,它的地址以及它的(值的)类型(类型同时定义了数据长度);最后才是它的值!
2. 多处错误
= 0012ff74 应为 ebp-8 = 0012ff74
3. 不可思议的地方
为什么非要把指针当成所谓的“一种特殊的变量”?请仔细斟酌上面“变量”的说明。
为啥人们总是喜欢“创造”更多的概念让自己变得晕乎呢?
不过这好像是M$的传统...看看Windows编程便可略知一二
4. 关于[],请思考
lea eax, dword ptr ss:
这一句取的又是啥呢?
我的建议
1. 请参考nasm关于取地址与取值与masm的不同点
2. 多看看c代码对应的汇编输出,多单步调试
3. c中的参数是按值传递的!
请不要对此句话不以为然!
提供两个小例子
//例1
#include <stdio.h>
void SwapAddress(int *a, int *b)
{
int *t;
t = a;
a = b;
b = t;
}
int main(int argc, char *argv[])
{
int i = 123, j = 888;
int *pi = &i, *pj = &j;
printf("address of i: %p, address of j: %p\n", pi, pj);
SwapAddress(pi, pj);
printf("\n***AND NOW***\n");
printf("value of pi: %p, value of pj: %p\n", pi, pj);
return 0;
}
//例2:
#include <stdio.h>
void SwapAddress(int **a, int **b)
{
int *t;
t = *a;
*a = *b;
*b = t;
}
int main(int argc, char *argv[])
{
int i = 123, j = 888;
int *pi = &i, *pj = &j;
printf("address of i: %p, address of j: %p\n", pi, pj);
SwapAddress(&pi, &pj);
printf("\n***AND NOW***\n");
printf("value of pi: %p, value of pj: %p\n", pi, pj);
return 0;
}
翊夏沁雪
发表于 2014-5-10 16:35:45
掉掉掉地啊欧弟啊欧弟啊欧弟啊
517480964
发表于 2014-5-10 13:47:36
新手学习中,感谢楼主
yucgzs
发表于 2014-5-10 13:25:20
感谢分享!
h357851750
发表于 2014-5-10 13:01:27
C指针现在理解了
左半边的翅膀丶
发表于 2014-5-10 11:36:21
热爱鱼C^_^
寂寞s当中!
发表于 2014-5-10 11:02:36
很难理解汇编语言的变量和取值,,,,
寂寞s当中!
发表于 2014-5-10 10:58:45
谢谢非常 需要
w92qq
发表于 2014-5-10 10:53:52
这么神奇的兔兔~~~~~~~~~~~~!
wohengnuli
发表于 2014-5-10 10:41:25
谢谢非常 需要
Howie
发表于 2014-5-10 10:24:58
好图 非常好 值得一看
Letian
发表于 2014-5-10 10:09:03
看看能不能对我有帮助支持一下
qw345tyu
发表于 2014-5-10 08:50:44
谢谢分享啊
qq893161525
发表于 2014-5-10 06:54:05
看看能不能对我有帮助支持一下
淡淡的荧光
发表于 2014-5-9 23:28:25
看看能不能对我有帮助支持一下:big
淡淡的荧光
发表于 2014-5-9 23:27:44
支持一下:big
Arnaud
发表于 2014-5-9 15:48:56
支持一下!!!
经典游戏内部
发表于 2014-5-9 11:32:07
指针搞懂还真要些时间
it小男
发表于 2014-5-8 22:05:13
学习学习!
wujie0827
发表于 2014-5-8 22:04:01
必须一定要回复