Call by Reference

Neue Frage »

Auf diesen Beitrag antworten »
kim.... Call by Reference

hallo,
ich habe ein Problem, und zwar folgendes Programm funktioniert nicht, allerdings weiß ich nicht warum...
innerhalb der Funktion kann ich ja nix ändern. kann mir bitte jemand helfen?
#include <stdio.h>
int main()

{

int aufgabe4_1(int x){
aufgabe4_2(x*x);
return (x);
}
int aufgabe4_2(int x){
aufgabe4_1(x+x);
return (x);

}}
 
Auf diesen Beitrag antworten »
Karlito

Hallo Kim,

leider hinterlässt Du zu wenig Information. Aber schau dir mal bitte folgenden Code an:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
//the pure C way
#include <stdlib.h>
#include <stdio.h>

void square_ref(int *x){
	*x = *x*(*x);
}

int square(int x){
	return x*x;
}

int main(int argc, char **argv){
	int test, test2;

	printf("Dear user, please give me an arbitrary number:\n");
	scanf("%d", &test);

	test2 = test;

	square_ref(&test);
	printf("%d\n", test);

	test2 = square(test2);
	printf("%d\n", test2);

	return 0;
}


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
//The C++ way
#include <iostream>

using namespace std;

void square_ref(int &x){
	x = x*x;
}

int square(int x){
	return x*x;
}

int main(int argc, char **argv){
	int test, test2;

	cout << "Dear user, please give me an arbitrary number:" << endl;
	cin >> test;

	test2 = test;

	square_ref(test);
	cout << test << endl;

	test2 = square(test2);
	cout << test2 << endl;

	return 0;
}


Bitte beachte, dass der erste Code in C und C++ funktionert, der zweite jedoch nur mit C++. Das zweite stellt aber den genauen call by reference Prozess dar, da das & vor dem Parameter dafür sorgt, dass implizit Referenzen verwendet werden. Der Code von quad_ref ist aber in beiden Sprachen äquivalent und intern wird in C++ der Code von C umgesetzt.

Wenn Du noch fragen hast, kannst du sie gerne hier stellen. Bitte gib aber an, welche Aufgabenstellung du hast und welche Sprache du verwenden sollst. Weiterhin wäre eine Angabe, was Du genau nicht verstehst hilfreich.

VG,

Karlito
Auf diesen Beitrag antworten »
kim...

Wink
in C.
Aufgabenstellung lautet:
Kopieren Sie die beiden unten stehenden Funktionen und fügen Sie sie zu Ihrem Programm hinzu.
Rufen Sie die Funktion aufgabe4_1(int x) mit dem Übergabewert x = 1 aus dem Menü auf.
Warum funktioniert das Programm danach nicht mehr?

und ich hab das Problem, wenn ich das Programm noch nicht im Menü eingebunden habe, läuft es auch so nicht. Der Compiler macht nix. ich weiß auch gar nicht, was ich mit x=1 machen soll.
Auf diesen Beitrag antworten »
eulerscheZahl

- Du hast die Funktionen ins main kopiert, die müssen aber außerhalb stehen
- Die Funktionen sollen sich gegenseitig aufrufen, dazu müssen sie sich kennen. 4_1 kennt aber 4_2 nicht, da 4_1 vor 4_2 implementiert wird. Abhilfe schafft, den Funktionskopf der anderen Funktion schon vorher hinzuschreiben.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
#include <stdio.h>
int aufgabe4_1(int x);
int aufgabe4_2(int x);


int aufgabe4_1(int x)
{
    aufgabe4_2(x * x);
    return x;
}

int aufgabe4_2(int x)
{
    aufgabe4_1(x + x);
    return x;
}

int main()
{
    //hier kommt der Funktionsaufruf:
    aufgabe4_1(1);
} 

Wenn du das aber ausführst, wird es abstürzen, weil:
4_1 ruft 4_2 auf. 4_2 ruft wiederum 4_1 auf. 4_1 ruft dann 4_2 auf. 4_2 ruft ...
das gibt eine Endlosschleife.
 
Auf diesen Beitrag antworten »
kim...

danke smile das habe ich jetzt soweit verstanden. und wie sorge ich dafür dass die endlosschleife aufhört?
Auf diesen Beitrag antworten »
eulerscheZahl

Du rufst die jeweils andere Funktion auf, ohne etwas damit zu machen. Wozu brauchst du dann überhaupt den Aufruf? Ich würde die Zeile einfach entfernen.
Auf diesen Beitrag antworten »
kim...

also funktioniert das Programm nicht mehr, weil wie du schon sagtest, eine endlosschleife entsteht? das wäre doch die antwort oder auf meine Aufgabenstellung?
Auf diesen Beitrag antworten »
eulerscheZahl

Ja.
Auf diesen Beitrag antworten »
kim...

vielen dank euch beiden smile
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »