Definition von Parametern

otis1990

Grünschnabel
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
 
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:

C++:
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 );
}
 
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
 
Zuletzt bearbeitet:
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:

C++:
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;
}
 
ok das verstehe ich jzt danke sehr gut erklärt *lob*

nenne ich dieses unterprogramm nun funktion oder prozedur

liebe grüße
 
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.
 
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.:
C++:
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?
 
Zuletzt bearbeitet:
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).
 
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.
 
Zurück