Einzelnen Beitrag anzeigen
Alt 25.11.2003, 11:17   #30
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

main()

ist das gleich wie

int main (void)

void bedeutet es wird kein Wert vom Betriebssytem übernommen.

void im allgemeinen bedeutet kein Datentyp.

void *Zeigervariable;

bedeutet, daß der Variablen Zeigervariable Adressen jeglicher Zeigervariableninhalte zugewiesen werden können.

char *Zeichenkette,*String_4711;

int *Zeiger_auf_Lottoziehungszahl;

Zeigervariable= Zeichenkette;

Zeigervariable= String_4711;

Zeigervariable= Zeiger_auf_Lottoziehungszahl;

(Das) Ist alles möglich - lediglich das

Zeiger_auf_Lottoziehungszahl= String_4711;

ist nicht erlaubt, weil die Datentypen auf die die Zeigervariablen zeigen, unterschiedlich sind.



Wenn man an der Eingabeaufforderung - dem DOS Prompt ist gemeint oder an der Linux Shell - folgendes eingibt:

bastet_prg_maxipraxihaxi parameter1 2 3 4 parameter5

so muß / sollte man main folgendermaßen definieren um auf diese Strings (fünf an der Zahl, nämlich): "parameter1" "2" "3" "4" "parameter5" (ohne Anführungszeichen natürlich, NAAHHHH, bastet Du machst mich schwach !) in der Funktion main zugreifen zu können:

int main ( int argc, char **argv )

oder

int main ( int argc, char *argv[] )


Variante 1 deklariert argv als Zeiger auf einen Zeiger und darob ein Array von Strings.

Variante 2 deklariert argv als Feld (=Array) von Strings.

Ein String hat eine Anfangsadresse und wird so implementiert:

char *zeigervariable;

oder

char zeichen_array_oder_auch_string_genannt[20]

bzw. ohne Längenangabe:

char zeichen_array_oder_auch_string_genannt[]


Ohne Längenangabe kann man (muss man) ein Char Array in einem Funktionskopf deklarieren.

argc beinhaltet 6 Argumente, nämlich den Programmnamen "bastet_prg_maxipraxihaxi" und die 5 eingegebenen Worte ("parameter1" bis "parameter5", dazwischen "2" "3" und "4" *herum[schüchter|drucks] ich tu*)

Also:

Code:
int main ( int argc, char **argv )
{
 int i;

 for(i=0; i<argc; i++)
  printf("Argument %d:%s<\n",i,(*argv)++);

 return 0;
}
Soll argc und argv in jeder Funktion nutzbar sein, kann man deren Werte (also den integer Wert von argc sowie den Adresswert der Variablen argv) an globale Variablen übergeben.

Code:
int ich_machs_jetzt_in_einer_funktion (void); /* Prototyp */

int g_argc;
char **g_argv;

int main ( int argc, char **argv )
{
 /* bitte nicht vergessen, sonst stürzt das Programm unweigerlich ab - u.U. zumindest */
 g_argc= argc;
 g_argv= argv;

 ich_machs_jetzt_in_einer_funktion();

 return 0;
}

int ich_machs_jetzt_in_einer_funktion (void)
{
 int i;
 char **l_argv= g_argv; /* lokale Zeigervariable, vielleicht brauchen wir den ursprünglichen Wert
der globalen Zeigervariablen g_argv ja noch,
deswegen g_argv hier nicht verändern */

 for(i=0; i<g_argc; i++)
  printf("Argument %d:%s<\n",i,(*l_argv)++);

 return 0;
}
mfg Kikakater
kikakater ist offline   Mit Zitat antworten