空指针在主函数中被赋值与在调用函数中被赋值的差别

# include <stdio.h>


int main()
{
int a=10;
int *p=&a;
p=NULL;
printf("%d\n",*p);
return 0;

}

在这个程序中因为将a的地址赋值给指针p,然后又将p中的存储的a的地址赋值为空,所以指针p,不再有指向,打印*p程序崩溃。

# include <stdio.h>


void Fun(int *p)
{
p=NULL;
}
int main()
{
int a=10;
int *p=&a;
Fun(p);
printf("%d\n",*p);
return 0;
}

在这个程序中,先将a的地址赋值给指针p,然后调用函数Fun,将p中存储的a的地址传到Fun中,该指针在调用函数中,将传到该调用函数中的指针赋值为空,此时调用函数中的指针已经不是指针p,所以修改的也只是另外一个指针,此时传回到主函数的指针不再是之前保存a的地址的指针p,所以对于指针p仍然指向a,,*p为 10.

猜你喜欢

转载自blog.csdn.net/Monster7559/article/details/78647398