Michi schrieb:
> Wieso wird hier zweimal * verwendet bei **arg und sogar dreimal bei
> ***in_arg?
>
>
> void set_multiport(char *device, int fd, char ***in_arg)
Das musst du wohl den Autor von set_multiport() fragen, oder du
schaust dir an, was danach damit passiert.
> main(int argc, char **argv) {
Vielleicht gefällt es dir ja in der "klassischen" Schreibweise
besser:
1 | main(int argc, char *argv[]);
|
Das ist ein Feld von Zeigern, die auf char * (also auf Felder von
Zeichen) zeigen. Da dieses wiederum selbst an eine Funktion
übergeben wird als Parameter, wird aus dem Feld ein Zeiger.
Ein beispielhafter Aufruf könnte also sein:
1 | char p1[] = { 'f', 'o', 'o', 0 };
|
2 | char p2[] = { 'b', 'a', 'r', 0 };
|
3 |
|
4 | char *argv[] = { p1, p2 };
|
5 |
|
6 | main(2, argv);
|
Wenn du nun innerhalb von main() das komplette Argument argv so
an eine Funktion weiterreichen willst, dass diese Funktion das
ursprüngliche argv auch noch selbst manipulieren kann, bist du
bei obigem "Dreifach-Sternchen", denn du musst dessen Adresse
übergeben:
1 | set_multiport("foo", 42, &argv);
|
Warum man sowas aber gerade da braucht, ist dem Schnipsel
nicht zu entnehmen.