int _tmain(int argc, _TCHAR* argv[])
{
int * p = (int *) malloc(sizeof(int));
//*p = 10;
flee(p);
printf("%d",*p);
//釋放p
free(p);
printf("----");
int * i = (int *) malloc(sizeof(int));
flee2(&i);
//釋放i
printf("%d",*i);
free(i);
}
//入參為指針,仍為值傳遞,即副本。只有引用傳遞是傳遞p本身。
void flee(int *q)
{
//副本修改的是指針所指變量的值,而不是指針本身。
*q = 20;
//出棧時副本被自動銷毀,而外面的P所指變量的值被改了,但指針地址實際上未改變。
}
void flee2(int **q)
{
//int i = 5;
////副本指向了一個新的位置,所以真正地修改了一個指針地址。但產生的一個問題是,原始定義的i產生了野指針。
//*q = &i;
//i =3;
if(q != NULL && *q != NULL)
{
*(*q) = 5;
}
}
摘自 功夫 熊貓