Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » C Programm » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Zum Ende der Seite springen C Programm
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Keeen
unregistriert
C Programm Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Guten Abend, ich würde gerne wissen, weshalb die Funktion im inneren des folgenden Programms einfach übersprungen wird und wie ich dieses Problem beheben könnte...

Ich versuche mit diesem Programm einfach eine Funktion zu erstellen, welche den Wert zweier Variablen verändert, dies allerdings nicht nur im inneren von sich selbst tut, sondern auch in der außerhalb liegenden main Funktion. Es geht also im Prinzip um "call by reference". Also obige Idee versuche ich mit Pointern zu bewerkstelligen...

Hier das Programm:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int x[2];
x[0]=5;
x[1]=5;
printf("x[0]: %d, x[1]: %d, \n", x[0], x[1]);
int *t;
int *m;
t=&x[0];
m=&x[1];
system("PAUSE");

void p(int *t, int *m)
{*t=7;
*m=8;
printf("%d, %d\n", x[0], x[1]);
system("PAUSE"); }

printf("%d, %d\n", x[0], x[1]);

system("PAUSE");
return 0;
}
03.01.2012 16:42
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

du muss die Funktion schon noch aufrufen... Sie wird nicht automatisch ausgeführt.

Siehe:http://en.wikipedia.org/wiki/Nested_function

Sonst ist die Funktion nur deklariert, wird aber nicht verwendet.

Du musst noch mit den Sichtbarkeiten der Variablen aufpassen. Wenn du t und m inner- und außerhalb deiner eingebetteten Funktion verwendest, werden in der Funktion (und zwar nur in der eingebetteten Funktion) t und m mit den übergebenen Parametern überschrieben.

VG,

Karlito
03.01.2012 17:25 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Keeen
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

hm ok.

Aber wie könnte ich denn nun obiges Problem lösen? Ich will eine Funktion, welche 2 oder mehr Variablen einer anderen Funktion ändert.
03.01.2012 17:39
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Fehlt doch nur noch der Aufruf...

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:
32:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int x[2];
	x[0]=5;
	x[1]=5;
	printf("x[0]: %d, x[1]: %d, \n", x[0], x[1]);
	int *t;
	int *m;
	t=&x[0];
	m=&x[1];
	system("PAUSE");

	void p(int *t, int *m)
	{
		*t=7;
		*m=8;
		printf("%d, %d\n", x[0], x[1]);
		system("PAUSE"); 
	}

	p(t,m); //Aufruf

		printf("%d, %d\n", x[0], x[1]);

		system("PAUSE");
		return 0;
} 


Wobei ich an deiner Stelle keine eingebettete Funktion verwenden würde:

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:
32:
33:
#include <stdio.h>
#include <stdlib.h>

void p(int *t, int *m)
{
	*t=7;
	*m=8;
	printf("%d, %d\n", x[0], x[1]);
	system("PAUSE"); 
}

int main(int argc, char *argv[])
{
	int x[2];
	x[0]=5;
	x[1]=5;
	printf("x[0]: %d, x[1]: %d, \n", x[0], x[1]);
	int *t;
	int *m;
	t=&x[0];
	m=&x[1];
	system("PAUSE");


	p(t,m); //Aufruf

	printf("%d, %d\n", x[0], x[1]);

	system("PAUSE");
	return 0;
} 


VG,

Karlito
03.01.2012 17:47 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Keeen
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Super, danke!!

Ich habs halt irgendwie auf jegliche sonstige Art versucht aufzurufen (z.B. p(*t, *m) etc.), aber so nicht.

Vielen Dank großes Grinsen
03.01.2012 17:55
Baumstruktur | Brettstruktur
Gehe zu:
Informatiker Board » Themengebiete » Theoretische Informatik » C Programm