基本上,我有一个char *数组,我想在这个函数中传递和修改,所以我传入一个指向char *数组的指针。也就是说,我想传递一个指向char * arr []的指针。两者有什么区别?三星:char *(* arr)[]和char *** arr(在C中)有什么区别?
2
A
回答
7
与往常一样,http://cdecl.org是你的朋友:
char * (*arr)[]
- “宣布改编为指针,指针数组CHAR”char *** arr
- “宣布改编为指针,指针指向char”
这些不一样。首先,第一种是不完整的类型(为了使用指向数组的指针,编译器需要知道数组的大小)。
你的目标不完全清楚。我猜想你真正想做的只是修改你的数组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。
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);
相关问题
- 1. 将char ** arr转换为char * arr []
- 2. char [] c和char c []有什么区别?
- 3. 如何将char arr [4] [50]转换为char ** arr
- 4. MSVC中char和CHAR有什么区别?
- 5. (int *)arr [2]和int * arr [2]之间的区别是什么?
- 6. char arr =“...”;在C程序导致崩溃
- 7. char str []和char * str有什么区别?
- 8. char * s和char * s有什么区别?
- 9. char和unsigned char有什么区别?
- 10. (char *)和char *有什么区别?
- 11. 在C++中char和char *有什么区别?
- 12. 'char()'和'char'在C++中有什么区别
- 13. C++中char * p和const char * p有什么区别?
- 14. func foo(arr [] int)int和func foo(arr [num] int)有什么区别int
- 15. 当在struct中声明时,char []和char *有什么区别?
- 16. 差(ARR [5])和炭(* ARR)[5]
- 17. int和char数组有什么区别?
- 18. char *和int *的区别是什么?C++ char * vs int *
- 19. foo(int * arr)和foo(int arr [])之间的任何区别?
- 20. char array []和char *数组有什么区别?
- 21. char str []和char * str作为函数参数有什么区别?
- 22. static const char * const和static const char []之间有什么区别?
- 23. 定义char a [5]和char(* a)[5]之间有什么区别?
- 24. char *和const_cast有什么区别<char*>(string.c_str())
- 25. typedef char [4] A和typedef char(&A)[4]之间有什么区别?
- 26. char * pt和char * pt在C++中有区别吗?
- 27. (const char * str),(char const * str)和(char * const str)之间有什么区别?
- 28. char []和C++中的字符串有什么区别?
- 29. 在这种情况下,char []和char *的区别是什么?
- 30. 为什么在($ arr as&$ value)中有“&”?
+1感谢您分享cdecl站点链接。 – Till 2012-04-17 01:41:14
感谢您的资源和解释!这回答了我正在寻找的东西。 – user1337532 2012-04-17 01:51:22