#include <stdio.h>
#include <malloc.h>
void fun1(int ** p)
{
int i = 10;
*p = &i;
}
void fun2(int * p)
{
int i = 20;
p = &i;
}
void fun3(int ** p)
{
int i = 30;
*p = &i;
}
int main(void)
{
int * a;
fun1(&a);
printf("a = %d \n", a);
printf("*a = %d \n", *a); //10
int * b;
fun2(b);
printf("b = %d \n", b); // 1
// printf("*b = %d \n", *b); //error
int * c = (int *)malloc(sizeof(int));
fun3(c);
printf("%d \n", *c); //垃圾值
return 0;
}
这里我实在想不通
-
问题1:fun1 函数 和 fun2 函数 的区别,一个传递的是指针变量的地址,一个传递的是指针变量,为啥 fun1 函数可以得到10 ,而 fun2 函数不可以得到 20
-
问题2:fun1 函数的 i 变量会因为 函数fun1 的结束而被系统释放掉,进而指针指向的是一个垃圾值,为啥值还是10,(这里参照fun3 函数看)
1、传递指针变量,那个变量就只在局部方法里有用。你再fun2函数里输出一下就可以看到效果了。只有指针变量的地址才是影响全局的。
2、你没有释放,所以还是10