Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: Prozedur mit Rückgabewerte in C
AUTOR BEITRAG
Earth

RANG Lord of Luck

#1 - 30.12 15:05

Hi Leute,

ich muss in einer Aufgabe eine Prozedur programmiernen die Rückgabeparameter(anzit,ok,x0) enthält. Als Eingabe habe ich die variablen (a,b,g). Kann mir jemand schreiben wie eine solche Prozedur aussehn muss. Braucht man da sowas wie "call by value" und "call by reference" und wenn ja was ist das??? Also das wichtiges wäre mir dass mir jemand den Aufbau einer solchen Prozedur postet und ein wenig dazu erklärt.

Vielen Dank im vorraus
Shaker

RANG Godlike

#2 - 30.12 18:09

also da die funktion drei werte zurückgeben soll, musst du hier mit einer struct arbeiten

code:

struct tmp{
  int anzit;
  int ok;
  int x0;
};


und dann machst du folgendes als funktion:

code:

struct tmp * fnkt(int a, int b, int g){
   struct tmp *new = (struct tmp*)malloc(sizeof(struct tmp));
   [...]
   return new;
}


dies wäre meiner ansicht nach eine call by value methode, da die werte direkt als wert übergeben werden.

alternativ könntest du auch die rückgabestruktur schon als zeiger der funktion übergeben, was ein call by reference wäre.

oder irre ich mich bei den begriffen?

edit: es können natürlich auch andere datentypen als int's genommen werden..
Earth

RANG Lord of Luck

#3 - 31.12 12:35

ähm sry hab noch nie was von der struct methode gehört, sicher dass es nicht anders auch möglich ist?

Kannst du mal die einzelenn teile in dem Programmcode näher erklärn ich check gar nix. Was z.B. bedeutet dieser Teil:

code:
struct tmp{
  int anzit;
  int ok;
  int x0;
};
Crush (Anti Däääh)

RANG Master of Clanintern

#4 - 31.12 16:54

Eine Struktur ist ein Datentyp, der aus mehreren Untervariablen besteht. Da Funktionen immer nur einen einzigen Wert zurückgeben können, muss man um mehrere Daten zurückzugeben eine Struktur zurückgeben.

Was dein Lehrer von dir aber wahrscheinlich will, wenn er von "call by value" und "call by reference" redet, ist eine Funktion die keinen Rückgabewert verwendet sondern statdessen ihre Eingabewerte verändern kann.

Wenn du eine Funktion hast deren Argumente "by value" übergeben werden, dann arbeitet die Funktion mit Kopien der Eingabevariablen. Wenn sie diese verändert, dann hat das keinen Einflus auf die Werte in der aufrufenden Funktion. Wenn man aber der Funktion erlauben will die Eingabewerte zu verändern und dies auch Einfluss in der aufrufenden Funktion hat, dann muss man die Argumente "by reference" übergeben. In diesem Fall übergibt man nicht die Variable sondern einen Pointer (auf deutsch: Zeiger) auf die Variable.

Beispiel:

code:

void halbieren(int* zahl)
{
    *zahl /= 2;
}

int main()
{
    int x = 32;
    halbieren (&x);
    printf("x ist jetzt nur noch %d", x);
}
Earth

RANG Lord of Luck

#5 - 31.12 18:24

Ok danke so hab ich das gemeint...

Noch was anders.. das passt zwar nicht so in den Thread hier rein aber mag jetzt nicht nochmal nen neuen Thread aufmachen. wenn ich mit Dev C++ ein neues Projekt anlegege steht immmer folgendes da:


code:

int main(int argc, char *argv[])
{
  
  system("PAUSE");
  return 0;
}


wenn ich alerdings das int argc, char *argv[] weglasse funktioniert das programm dass ich schreib genauso gut, was hat das da für ne bedeutung?
Crush (Anti Däääh)

RANG Master of Clanintern

#6 - 01.01 07:36

Diese beiden Variablen brauchst du wenn du willst, dass man dem Programm Startargumente übergeben kann. argc ist die Anzahl der Argumente und argv ist ein Array aus Zeichenketten welches die Argumente enthält.


Wenn du dein Programm mit Namen foo.exe aus der Eingabeaufforderung folgendermaßen aufrufst:
code:
foo.exe -load bla.dat
dann wäre argc = 2, argv[1] = "-load" und argv[2] = "bla.dat" (argv[0] ist immer der Name des Programms selber).
Earth

RANG Lord of Luck

#7 - 01.01 11:11

Ich hab das zwar jetzt nicht verstande aber, trotzdem Danke.

Wird schon nicht so wichtig sein für die Erstsemesterprüfung