Road_7 发表于 2014-5-28 13:59:19

关于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;
}

vvqboy 发表于 2014-5-28 13:59:20

你还是没有理解指针。
首先要知道,你的r也是个变量。r和fu函数中的p,都是变量,他们是两个变量!
他们可以同时指向同一个地址,也可以指向不同地址,对p指向地址做修改,不会对r产生影响

Road_7 发表于 2014-5-28 14:03:01

为什么函数返回的时候,r的地址没有改变,我不是引用调用, 对r 的地址加二了吗

vvqboy 发表于 2014-5-28 14:44:25

因为r也是个变量,也在内存中占有地址。所以你可以声明一个二级指针,int **pr,指向r,此时通过pr就可以修改r的值了

elvo 发表于 2014-5-28 15:23:34

楼上大神正解!!!

Road_7 发表于 2014-5-28 16:39:36

vvqboy 发表于 2014-5-28 14:44 static/image/common/back.gif
因为r也是个变量,也在内存中占有地址。所以你可以声明一个二级指针,int **pr,指向r,此时通过pr就可以修改 ...

好像是懂了,谢大神指点

Road_7 发表于 2014-5-28 16:56:51

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;
}

vvqboy 发表于 2014-5-28 17:37:25

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

vvqboy 发表于 2014-5-28 17:39:21

Road_7 发表于 2014-5-28 16:56 static/image/common/back.gif
我刚才试了一下你的方法,能否在fu函数中改掉r的地址呢,一下是我的代码(没改掉r)

你的int **ptr =& p;
通过ptr,只能改变p的值,对r没有任何影响的

Road_7 发表于 2014-5-28 18:31:12

vvqboy 发表于 2014-5-28 17:37 static/image/common/back.gif
唉,我直接给你代码吧
上面代码执行后,r的值加了8

谢大神,啦啦啦

815116820 发表于 2014-5-28 20:02:21

Road_7 发表于 2014-5-28 18:31 static/image/common/back.gif
谢大神,啦啦啦

形参跟实参的数据类型不一样

饿鱼 发表于 2014-6-3 20:20:37

要深刻理解传值调用和传址调用,多看几遍书吧

Road_7 发表于 2014-6-3 22:13:22

其实我在学汇编了,我也是高逆向的
页: [1]
查看完整版本: 关于c的函数