</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或者全局变量