c指针在函数调用过程中的问题

来源:互联网 发布:三组数据如何做曲线图 编辑:程序博客网 时间:2024/05/13 10:22
</pre><p></p><pre name="code" class="cpp">#include <stdio.h>#include <stdlib.h>int *c;void f(int *b){int a = 10;b = &a; }int main(){int tmp;f(&tmp);printf("%d\n",tmp);return 0;}

上面这段代码打印的结果是:2130567168

分析一下就可以知道,变量tmp的地址传递到函数f()中,指针b的值就是tmp的地址,后面b的值变成了a的地址,所以函数f()调用结束后,tmp地址存的值并没有发生

变化。局部变量未初始化,打印的值随机。

稍微改一下:

#include <stdio.h>#include <stdlib.h>int *c;void f(int *b){int a = 10;b = &a; }int main(){int *tmp;f(tmp);printf("%d\n",*tmp);return 0;}

这样输入的结果是:0

这个函数分析一下就是,指针tmp传入函数f中的b变量,相当于b=tmp,随后b=&a,这一过程tmp指针的内容并没有发生改变,所以打印出来指针指向的地址值是随机的

再修改一下程序:

#include <stdio.h>#include <stdlib.h>int *c;void f(){int a = 10;c = &a; }int main(){int *tmp;f();printf("%d\n",*c);return 0;}

这样得到的结果是:10

这一过程指针c的值是a的地址,所以打印c指向的数值就是a的值

-------------------------------------------分割线--------------------------------------------------------------------------------

所以要想获得a的值,要么传递指针后,指针指向的地址存入a的值(而不是a的地址)

要么就是获得a的地址,通过return或者全局变量

0 0