tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
315
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    otis1990 otis1990 ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    7
    Hallo hab mal ne frage:

    kann mir jemand definitionen geben für folgende 3 begriffe:
    • Eingabeparameter
    • Ausgabeparameter
    • Ein-/Ausgabeparameter

    ich weiß zwar ungefähr wie man es erklären könnte aber ich brauche eine konkrete definition bzw erklärung...

    Vielen Dank

    Hanse
     

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Bei Funktionen spricht man von Eingabe-Parametern, solche, welche an die Funktion übergeben und in der Funktion verarbeitet werden. Diese werden manchmal auch als Call-by-Value bezeichnet.

    Ausgabe-Parameter sind in der Regel Referenzen auf Speicher-Orte, die bestimmte Typen aufnehmen können. Solche Parameter bezeichnet man mit unter auch als Call-by-Reference, in C werden sie als Zeiger implementiert. Die Funktion überschreibt dann einfach den Speicher der Variablen mit dem neuen Wert.

    Ein-/Ausgabe-Parameter sind dann eine Kombination aus den ersten beiden und müssten um die Bedingung Ausgabe-Parameter zu erfüllen, Call-by-Reference sein. Diese Referenz ist allerdings mit einem bestimmten Wert vorinitialisiert, der dann in der Funktion auch verarbeitet wird.

    Hier mal ein Beispiel für Ein-/Ausgabe-Parameter:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    void sayHello( char *helloText )
    {
      printf( "Es ist an die Funktion übergeben worden: %s\n", helloText );
      strcpy( helloText, "Hallo zurueck!" );
    }
     
    int main( void )
    {
       char helloSentence[100];
       strcpy( helloSentence, "Hallo Welt" );
     
       sayHello( helloSentence );
       printf( "Ausserhalb der sayHello-Funktion: %s\n", helloSentence );
    }
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    otis1990 otis1990 ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    7
    hy danke erstmal für die tolle erklärung
    mir ist grad so einiges klar geworden (wieder mal ein AHA-Effekt )

    aber ne frage hab ich noch:
    bei deinem programmbeispiel ist mir der aufruf des unterprogrammes noch nicht ganz klar:
    müsste in zeile 12 statt "sayHello( helloSentence ); " nicht "sayHello( &helloSentence ); " stehen
    denn ich gebe ja die referez auf den string an oder


    aja mir ist noch was eingefallen:

    eine prozedur ist ein unterprogramm ohne rückgabeparameter
    eine funktion ist ein unterprogramm mit rückgabeparameter
    wie definiere ich ein unterprogramm das wie dein beispiel aussieht? denn es gibt ja im eigentlichen sinne kein return, aber ich gebe ja einen wert zurück in dem ich den string ändere

    danke nochmals
    Geändert von otis1990 (09.03.10 um 21:50 Uhr)
     

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Wie schon erwähnt, ist das Beispiel ein Call-by-reference. Der Zeiger auf char bedeutet, dass auf den Anfang eines Speicherbereiches gezeigt wird, der Daten eines bestimmten Wertes annehmen kann. Innerhalb der sayHello-Prozedur (sehr gut beobachtet) wird der Inhalt des Speichers geändert. Deshalb braucht man da keinen Rückgabewert. Bei integer sieht das dann aber etwas anders aus:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    void modifyIntValue( int *value )
    {
      *value = 4;
    }
     
    int main(void)
    {
      int a = 2;
      modifyIntValue( &a ); // Hier die Adresse von a als Zeiger übergeben
      printf( " a ist nun %d\n", a );
     
      return 0;
    }
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  5. #5
    otis1990 otis1990 ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    7
    ok das verstehe ich jzt danke sehr gut erklärt *lob*

    nenne ich dieses unterprogramm nun funktion oder prozedur

    liebe grüße
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    In C gibt es nur Funktionen. Manche Funktionen haben allerdings einen leeren Rückgabewert (void), der von der aufrufenden Funktion nicht ausgewertet werden kann. Demnach ist es eine Funktion.

    Diese Definition hängt immer von der verwendeten Programmiersprache ab.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    3Cyb3r 3Cyb3r ist offline Mitglied Brokat
    Registriert seit
    May 2008
    Ort
    Baunatal (Hessen)
    Beiträge
    413
    Wo wir gerade beim Thema void sind:
    Es gibt void Zeiger Sehr praktisch und sie sind nicht "leer" XD

    :: Eine void Zeiger ist ein typenloser Zeiger, d.h. man kann him eine beliebige Adresse zuweisen (sinvoll wenn der Datentyp des Zeigers noch nichts fessteht).
    :: Desweiteren ist es möglich eine explizite Typumwandlung durchzuführen und ihn somit in jeden möglichen Datentyp zu wandeln.

    z.B.:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    int main() 
    {
       int value = 0x0A;
       char *string = "Das hier ist ein String wow (nein spiele ich nicht)";
       void *void_pointer;
     
       void_pointer= (char *)string; // Zeiger auf einen String setzen
       printf("void pointer: %p; string: %p\n",void_pointer,string);
     
       void_pointer = (int *)&a;  // Zeiger auf die Variable value
       printf("void pointer: %p; value: %p\n",void_pointer,&value);
       
       return (0x08 & ~ ( 1 << 3 ));
    }

    MFG
    // ich freue mich immer über Bewertungen/Danke

    Edit:
    Ich hoffe ich konnte verwirren ansosnten war mein Beitrag sinvoll?
    Geändert von 3Cyb3r (10.03.10 um 01:09 Uhr)
     
    Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
    - Wolfgang Körner

  8. #8
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Das bestreitet keiner

    Ich sagte ja nicht, das der Rückgabetyp Zeiger auf void sondern nur void ist. Und damit ist der Rückgabewert nicht prüfbar weil leer (void heißt ja auch leer).
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  9. #9
    3Cyb3r 3Cyb3r ist offline Mitglied Brokat
    Registriert seit
    May 2008
    Ort
    Baunatal (Hessen)
    Beiträge
    413
    Ich habe ja auch nicht behauptet das du das gesagt hast!
    Ich habe nur gesagt das es welche gibt, damit man als Anfänger nicht irgendwann mal darüber stopelt und sich denkt wtf was will ich mit nem void Zeiger.
     
    Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
    - Wolfgang Körner

Ähnliche Themen

  1. Definition/Deklaration
    Von Mickeyman im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 03.02.08, 14:08
  2. [XML/XSD] Element-Definition?
    Von arto im Forum XML Technologien
    Antworten: 1
    Letzter Beitrag: 16.05.06, 01:05
  3. Definition von Schwarz
    Von fawae im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 05.08.05, 19:27
  4. GFX-Definition
    Von Dragen im Forum Smalltalk
    Antworten: 2
    Letzter Beitrag: 18.03.05, 08:34
  5. Definition
    Von murdi im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 27.02.02, 23:15