Pointer mit *** ?

Gast #2376717
Lesenswert?

Wieso wird hier zweimal * verwendet bei **arg und sogar dreimal bei 
***in_arg?


void set_multiport(char *device, int fd, char ***in_arg)
{
char **arg = *in_arg;
char *word, *argument;



oder Ein anderes Beispiel:
1
void get_serial(char *device)
2
{
3
  printf("%s\n",device);
4
}
5

6
  
7
main(int argc, char **argv) {
8
  get_serial(argv[1]);
9
return 0;
10
}

hier hat **argv auch zweimal *, lasse ich eins weg, bekomme ich eine 
Warnung:

test.c: In function 'main':
test.c:16: warning: passing argument 1 of 'get_serial' makes pointer 
from integer without a cast


Soweit ich weiss Zeigt *device nur auf eine Adresse, die scheinbar auch 
mehr als ein Char beinhalten kann, nur wieviele?!


Was habe ich für Möglichkeiten wenn ich C anständig lernen möchte?
Mal abgesehen von Büchern.. gibt es da nicht Kurse etc..?
Moderator Persönliche Seite #2376729
Lesenswert?

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.
Gast #2380542
Lesenswert?

Danke für die Nennung, Carsten.

Der VIDEO-Kurs ist in der Tat für Einsteiger gedacht.

Profis finden im Netz genügend Webseiten mit Projekten in C.
Zudem lernt man Programmierennur durch Programmieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren