JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=e163870b47a17069c2bef927b95fc49aMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Werteübergabe an die main Funktion

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
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

BeitragVerfasst am: 11.03.2004, 20:05    Titel: Werteübergabe an die main Funktion Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.03.2004, 20:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.03.2004, 20:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 11.03.2004, 20:36    Titel: Antworten mit Zitat

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 Wink (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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
cout <<
Mini JLI'ler



Anmeldedatum: 13.02.2004
Beiträge: 48
Wohnort: Wien/Österreich
Medaillen: Keine

BeitragVerfasst am: 11.03.2004, 20:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 11.03.2004, 21:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum