Zitat:
Original geschrieben von kikakater
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
|

also wer do einen schwach macht, du machst mich absolut fertig
dam, bis jetzt hab ich immer nur main() oder int main() benutzt naja rhide schreit zwar bei main() aber ich hab keinen error. aba ich hab auch in anderen beispielen int main(void) oder void main (void) gesehen. und jaaa ich hab auch schon genügend links, erklärungen usw. gelesen... aba überall wirds gleich erklärt

also bitte erklärung für dummies und ned irgendwelche intelligenz voraussetzen
{und was dass betrifft: bastet_prg_maxipraxihaxi parameter1 2 3 4 parameter5
wär da nicht besser int bastet_prg_maxipraxihaxi[5] odr. redst wieder mal an mich vorbei? }
waaahhh - i muss des einfach kapieren.
ajo und da fällt mir ein - hab schon über die zeiger und arrays gelesen, wird aber noch nicht gefordert. des lern ich erst wenn ich die prüfung schaff und den c++ kurs machen darf
