2012-04-17 90 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

相关问题