2012-04-17 97 views

回答

7

與往常一樣,http://cdecl.org是你的朋友:

這些不一樣。首先,第一種是不完整的類型(爲了使用指向數組的指針,編譯器需要知道數組的大小)。

你的目標不完全清楚。我猜想你真正想做的只是修改你的數組char *中的底層數據。如果是這樣,那麼你可以將指針傳遞給第一個元素:

void my_func(char **pointers) { 
    pointers[3] = NULL; // Modify an element in the array 
} 

char *array_of_pointers[10]; 

// The following two lines are equivalent 
my_func(&array_of_pointers[0]); 
my_func(array_of_pointers); 

如果你真的想要一個指針傳遞給一個數組,那麼像這樣的工作:

void my_func(char *(*ptr)[10]) { 
    (*ptr)[3] = NULL; // Modify an element in the array 
} 

char *array_of_pointers[10]; 

// Note how this is different to either of the calls in the first example 
my_func(&array_of_pointers); 

有關數組和指針之間重要區別的更多信息,請參閱C FAQ的專用章節:http://c-faq.com/aryptr/index.html

+2

+1感謝您分享cdecl站點鏈接。 – Till 2012-04-17 01:41:14

+0

感謝您的資源和解釋!這回答了我正在尋找的東西。 – user1337532 2012-04-17 01:51:22

0

如果您具有char *(*arr)[]爲參數的功能,您將需要一個數組來傳遞與地址運算符:

void afunc(char *(*arr)[]); 

char *charptra, *charptrb, *charptrc; 
char *arr[] = {charptra, charptrb, charptrc}; 

afunc(&arr); 

另外一個,你必須通過一個指向指針一個指向指針的指針:

void afunc(char ***); 

char arr[] = "str"; 
char *arrptr = arr; 
char **arrptrptr = &arrptr; 
char ***arrptrptrptr = &arrptrptr; 

afunc(arrptrptrptr); 
+0

我的錯誤。這是一個錯字。 – Espresso 2012-04-17 01:00:57

+0

好的。但是你有沒有嘗試編譯你的第一個代碼片段? – 2012-04-17 01:02:21

+0

是的,它的工作原理。你有沒有看到任何問題? – Espresso 2012-04-17 01:05:51

相關問題