|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
cout << Mini JLI'ler
Anmeldedatum: 13.02.2004 Beiträge: 48 Wohnort: Wien/Österreich Medaillen: Keine
|
Verfasst am: 11.03.2004, 20:05 Titel: Werteübergabe an die main Funktion |
|
|
Hi, ich hoffe, dass ich euch mit meinen vielen Fragen nicht nerve...falls ja, dann ignoriert mich einfach...ansonsten...
Meine Frage: Wieso muss ich der main Funktion einen Zeiger auf ein char Array übergeben? Wieso gerade ein Zeiger...ich kann mir das nicht ganz erklären! Ich hab mal geschaut, was passiert, wenn ich das "*" entferne, dann kommt eine falsche Ausgabe...aber was bewirkt der Zeiger? Was passiert intern im Computer?
Hier das leicht veränderte Beispiel aus dem Buch:
Code: |
#include <iostream.h>
void main(int anzahlArgumente, char* argumente[])
{
cout << anzahlArgumente << '\n';
for(int i = 0; i < anzahlArgumente; i++)
{
cout << argumente[i] << '\n';
}
}
|
Für jede Antwort wäre ich sehr dankbar. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 11.03.2004, 20:19 Titel: |
|
|
Ich hab damit zwar nich so viel erfahrung, aber soweit ich das weiß, verhält sich das so:
eine char Variable ist ja eigentlich auch nur ein Zeiger auf den ersten Buchstaben, die anderen stehen direkt dahinter, so das man deren Adresse nicht braucht. (Man geht einfach die entsprechende Anzahl witer).
Bei der Werteübergabe an die Mainfunktion bekommt man aber nicht nur ein char Feld (char[x]) in dem dann ein String(ich weiß, das Wort ist nicht ganz korekt) steht, sondern man kann ja auch mehrere "Strings" übergeben.
Ich habe das mal in einen Quiz, das je nach Übergabeparameter an die ami-Funktion eine Datei öffnen soll so benutz:
Code: |
int main(int argc, char *argv[])
{
FILE *Dat=NULL;
if (1==argc)
{
Dat=fopen("Fragen.fra", "r");
}
else
{
Dat=fopen(argv[1], "r");
}
} |
Wenn man aslo argv[1] schreib, ist das nicht nur ein Zeichen (anders als bei:
Code: |
char test[8]="123witzig";
test[1]; //ist nur die "2";
|
sondern der komplette Übergabeparameter. (Der ja aus mehreen Zeichen besteht):
Es ist also, soweit ich das verstanden habesowas wie ein mehrdimensinales Feld (char Test[x][y]), in dem alle Übergabeparameter gespeichet sind.
Es mag ja sein, das ich mich irre, aber das Beispielprogramm funktioniert super. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 11.03.2004, 20:33 Titel: |
|
|
Jonathan hat recht. Es ist ein Array von Strings und ein String ist auch ein Array(von Zeichen). Und wenn man ein Array nicht dereferenziert ist es nix weiter als ein Zeiger auf das erste Element. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 11.03.2004, 20:36 Titel: |
|
|
Weis nicht obs ganz klar ist, aber ein char ist nur 1 Zeichen, ein String sind mehrer chars..
Zitat: |
Wieso muss ich der main Funktion einen Zeiger auf ein char Array übergeben? Wieso gerade ein Zeiger...ich kann mir das nicht ganz erklären!
|
naja...gibts halt sonst nicht soviele möglichkeiten eine vorher unbekannte Anzahl von Strings von vorher unbekannter länge , möglichst Sprachunabhängig, zu übergeben..
Zitat: |
Bei der Werteübergabe an die Mainfunktion bekommt man aber nicht nur ein char Feld (char[x]) in dem dann ein String(ich weiß, das Wort ist nicht ganz korekt) steht, sondern man kann ja auch mehrere "Strings" übergeben.
|
Man bekommt mehr oder weniger ein Array von char-Arrays (wie schon gesagt mehrdiemensionales Array)
nehmen wir mal an du würdest ein programm wie folgt (via konsole starten)
progname param1 param2
...dann hätten wir 3 Argumente (argc wäre also 2):
argv[0] (vom typ char *) enthält dann den String progname
argv[1] (ebenfalls char *) enhält dann den String param1
Edit: war etwas langsam |
|
Nach oben |
|
|
cout << Mini JLI'ler
Anmeldedatum: 13.02.2004 Beiträge: 48 Wohnort: Wien/Österreich Medaillen: Keine
|
Verfasst am: 11.03.2004, 20:46 Titel: |
|
|
Heißt das jetzt etwas, dass mein Zeiger, der auf ein Array zeigt, das in jedem Element einen weiteren Zeiger zu weiteren char Arrays "drinstehen" hat?
@Mazze ist argc dann nicht 3? Der Programmname wird ja mitgezählt... |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 11.03.2004, 21:07 Titel: |
|
|
Nö..fängt ja bei 0 an (also 0,1,2)
Abstrakt gesehen kannst du es dir auch als eine Liste(mit der Länge von argc) von char *'s vorstellen |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|