C Programm |
03.01.2012, 16:42 | 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; } |
||||||||||
|
|||||||||||
03.01.2012, 17:25 | 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 |
||||||||||
03.01.2012, 17:39 | 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. |
||||||||||
03.01.2012, 17:47 | Auf diesen Beitrag antworten » | ||||||||||
Karlito | Fehlt doch nur noch der Aufruf...
Wobei ich an deiner Stelle keine eingebettete Funktion verwenden würde:
VG, Karlito |
||||||||||
Anzeige | |||||||||||
|
|||||||||||
03.01.2012, 17:55 | 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 |
|