1. 程式人生 > >空指標在主函式中被賦值與在呼叫函式中被賦值的差別

空指標在主函式中被賦值與在呼叫函式中被賦值的差別

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