C Programm

Neue Frage »

Auf diesen Beitrag antworten »
Keeen C Programm

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;
}
 
Auf diesen Beitrag antworten »
Karlito

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
Auf diesen Beitrag antworten »
Keeen

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.
Auf diesen Beitrag antworten »
Karlito

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
 
Auf diesen Beitrag antworten »
Keeen

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
 
Neue Frage »
Antworten »


Verwandte Themen