基本上,我有一个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 arr =“...”;在C程序导致崩溃
- 3. char str []和char * str有什么区别?
- 4. char * s和char * s有什么区别?
- 5. 在C++中char和char *有什么区别?
- 6. C++中char * p和const char * p有什么区别?
- 7. func foo(arr [] int)int和func foo(arr [num] int)有什么区别int
- 8. foo(int * arr)和foo(int arr [])之间的任何区别?
- 9. int和char数组有什么区别?
- 10. char *和int *的区别是什么?C++ char * vs int *
- 11. char str []和char * str作为函数参数有什么区别?
- 12. typedef char [4] A和typedef char(&A)[4]之间有什么区别?
- 13. char * pt和char * pt在C++中有区别吗?
- 14. 为什么在($ arr as&$ value)中有“&”?
- 15. 函数int get()和istream&get(char&c)有什么区别
- 16. (char)0和'\ 0'之间有什么区别? in C
- 17. char *文件名[1]或char *文件名有什么区别?
- 18. 代码崩溃时INT ARR = 1 && arr;但不是INT ARR = 0 && arr;
- 19. 什么是更准确的平均方法,ARR [0]/N + ARR [1]/N ... + ARR [N-1]/N或(ARR [0] + ARR [1] ... + ARR [N-1])/ N为双倍?
- 20. C#中char和int之间的区别#
- 21. char和char [x:y]之间的区别
- 22. char **和char之间的区别[] []
- 23. C - 为什么arr [0]显示为32767
- 24. 为什么int * arr = {};法律?
- 25. char * t = new char和char * t = new char [10]有什么不同?
- 26. 将整型参考值转换为(const char *)有什么作用,以及在C++中转换为char *和转换为const char *有什么区别?
- 27. 搜索char []中的char与使用String.indexOf()方法搜索String有什么区别?
- 28. C - “char var []”和“char * var”之间的区别?
- 29. `return 1 + strlen_rec(&arr [1]);`是什么意思?
- 30. const char * const和const char []之间有区别吗?
+1感谢您分享cdecl站点链接。 – Till 2012-04-17 01:41:14
感谢您的资源和解释!这回答了我正在寻找的东西。 – user1337532 2012-04-17 01:51:22