簡體   English   中英

三星:char *(* arr)[]和char *** arr(在C中)有什么區別?

[英]Triple stars: What's the difference between char* (*arr)[] and char*** arr (in C)?

基本上,我有一個char *數組,我想在這個函數中傳遞和修改,所以我傳入一個指向char *數組的指針。 也就是說,我想傳遞一個指向char * arr []的指針。 兩者有什么區別?

一如既往, http//cdecl.org是您的朋友:

  • char * (*arr)[] - “將arr聲明為指向char的指針數組的指針”
  • char *** arr - “聲明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

如果你有一個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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM