Grundsätzlich bedeutet char * argv [] Array von char-Zeigern, während char ** argv Zeiger auf einen char-Zeiger bedeutet.
In jedem Array ist der Name des Arrays ein Zeiger auf das erste Element des Arrays, dh es enthält die Adresse des ersten Elements.
Also in dem unten angegebenen Code, in Char-Array x, ist x ein Zeiger auf das erste Element, '1', das ein Zeichen ist. Es ist also ein Zeiger auf ein Zeichen.
Und in Array arr, arr ist Zeiger erstes Element, x, die selbst ein Zeiger auf ein Zeichen ist. Also ein Zeiger auf einen anderen Zeiger.
Daher ist x char * und arr ist char **.
Beim Empfangen von etwas in einer Funktion, ist die Grundregel, dass Sie den Typ der Sache, die Sie erhalten, sagen müssen. Entweder sagst du einfach, dass du ein char ** erhalten möchtest, oder du kannst auch char * arr [] sagen.
Im ersten Fall müssen wir nichts Komplexes denken. Wir wissen einfach, wir erhalten ein Array von char *. Wissen wir das nicht? Also, wir bekommen es und benutzen es.
Im zweiten Fall ist es einfach, wie ich oben erklärt habe, dass arr ist ein char **, können Sie dies wie es ist Typ und erhalten es sicher. Jetzt kennt das System den Typ des Materials, das wir erhalten haben, und wir können auf die nächsten Elemente zugreifen, indem wir einfach die Array-Annotation verwenden. Es ist so, wir haben die Startadresse des Arrays erhalten, wir können sicher zu den nächsten Elementen gehen, und da wir wissen, dass es ein Typ ist, wissen wir, was es enthält und wie wir das weiter nutzen können. Wir wissen, dass es einen Zeiger auf Char enthält, so dass wir auch legal darauf zugreifen können.
void func1(char* arr[])
{
//function body
}
void func2(char** arr)
{
//function body
}
int main()
{
//x, y and z are pointer to char
char x[3]={'1', '2', '3'};
char y[3]={'4', '5', '6'};
char z[3]={'7', '8', '9'};
//arr is pointer to char pointer
char* arr[3]={x, y, z};
func1(arr);
func2(arr);
}
Zweiter Parameter unterscheidet sich in keiner Weise, was den Compiler betrifft, das heißt, char * argv [] 'ist nur äquivalent zu' char ** argv'. Das ist eher eine Frage des bevorzugten Codierungsstils. –
mögliche Duplikate von [Was sollte main() in C und C++ zurückgeben?] (Http://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c) –