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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.