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