基本上,我有一個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