关于c的函数
本帖最后由 Road_7 于 2014-5-28 14:02 编辑#include <stdio.h>
void fu(int *p, int *q)
{
p = p + 2;
*q = *q + 1;
}
int main()
{
int m = 1, c = 7,n = 2, *r = &m;
fu(r, &n);
printf("%d %d", *r, c);
return 0;
} 你还是没有理解指针。
首先要知道,你的r也是个变量。r和fu函数中的p,都是变量,他们是两个变量!
他们可以同时指向同一个地址,也可以指向不同地址,对p指向地址做修改,不会对r产生影响 为什么函数返回的时候,r的地址没有改变,我不是引用调用, 对r 的地址加二了吗 因为r也是个变量,也在内存中占有地址。所以你可以声明一个二级指针,int **pr,指向r,此时通过pr就可以修改r的值了 楼上大神正解!!! vvqboy 发表于 2014-5-28 14:44 static/image/common/back.gif
因为r也是个变量,也在内存中占有地址。所以你可以声明一个二级指针,int **pr,指向r,此时通过pr就可以修改 ...
好像是懂了,谢大神指点 vvqboy 发表于 2014-5-28 14:44 static/image/common/back.gif
因为r也是个变量,也在内存中占有地址。所以你可以声明一个二级指针,int **pr,指向r,此时通过pr就可以修改 ...
我刚才试了一下你的方法,能否在fu函数中改掉r的地址呢,一下是我的代码(没改掉r)#include <stdio.h>
void fu(int *p, int *q)
{
int **ptr =& p;
*ptr +=2;
*q = *q + 1;
}
int main()
{
int m = 1, c = 7,n = 2, *r = &m;
fu(r, &n);
printf("%d %d", *r, c);
return 0;
} Road_7 发表于 2014-5-28 16:56 static/image/common/back.gif
我刚才试了一下你的方法,能否在fu函数中改掉r的地址呢,一下是我的代码(没改掉r)
唉,我直接给你代码吧
#include <stdio.h>
void fu(int **p, int *q)
{
*p +=2;
*q = *q + 1;
}
int main()
{
int m = 1, c = 7,n = 2, *r = &m;
fu(&r, &n);
printf("%d %d", *r, c);
return 0;
}上面代码执行后,r的值加了8 Road_7 发表于 2014-5-28 16:56 static/image/common/back.gif
我刚才试了一下你的方法,能否在fu函数中改掉r的地址呢,一下是我的代码(没改掉r)
你的int **ptr =& p;
通过ptr,只能改变p的值,对r没有任何影响的 vvqboy 发表于 2014-5-28 17:37 static/image/common/back.gif
唉,我直接给你代码吧
上面代码执行后,r的值加了8
谢大神,啦啦啦 Road_7 发表于 2014-5-28 18:31 static/image/common/back.gif
谢大神,啦啦啦
形参跟实参的数据类型不一样 要深刻理解传值调用和传址调用,多看几遍书吧 其实我在学汇编了,我也是高逆向的
页:
[1]