-->

c语言指针问题

2020-04-21 19:24发布

问题:

#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:

1、传递指针变量,那个变量就只在局部方法里有用。你再fun2函数里输出一下就可以看到效果了。只有指针变量的地址才是影响全局的。

2、你没有释放,所以还是10