首先把代碼貼上來:
#include <stdio.h> #include<windows.h> int f(int **iptr){ int a = 100; *iptr = &a; return 0; }
int main() {
int x = 7;
int *n;
int **m;
n=&x;
m=&n;
printf("m: %d\n",**m);
f(m);
printf("m: %d\n",**m);
Sleep(1000);
printf("m is %d\n",**m);
return 0;
}
然后我把執行的結果貼上來:
被紅顏色框起來的地方就是坑。
這個雙重指針**m所指向的值是在函數f中被改變成了100,但是函數f執行結束之后,**m所指向的變量a被釋放。結果變成了0。
編譯器環境是mingw -w64