參考鏈接:https://blog.csdn.net/fantasy666666/article/details/4422110
在C代碼中, 很容易在函數庫中見到類似如下函數原型的聲明:
void f(char** str_list);
於是, 有的程序員就寫了如下的調用代碼:
#define SIZE 100
char a[SIZE][SIZE];
f(a);
這個時候可要小心了, 調用f函數的方式是錯誤的.
如果你是實現f函數的程序員, 你會認為參數str_list實際指向的是什么呢:
str_list是一個指針1, 指向另一個指針2, 指針2指向char類型的變量.
++a; 偏移SIZE*sizeof(char)個字節;
++a[0]; 偏移1個字節;
++str_list; 偏移sizeof(char*)個字節; str_list[0]的值是一個指針, 該值是由a[0][0]~a[0][7]組成的(假設char*占8個字節).
++(*str_list); 偏移1個字節;
————————————————
版權聲明:本文為CSDN博主「MJN」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/njnu_mjn/article/details/16808395