#1 10. Dezember 2008 Algorythmen Auslagern [Pointer] Hiho... sind Pointer funktionsübergreifend? Ich habe versucht ein Programm zu schreiben, dass 2 Zahlen einließt, diese in ein andere Funktion schiebt, die Zahlen dort zu addieren und das Ergebnis an die ursprüngliche Funktion zurück zu geben. Also an sich nichts Kompliziertes. Mein Quelltext: Funktion 1: Code: #include <stdio.h> int main() { int a,b,*ptr1,*ptr2,*ptr3; ptr1=&a; ptr2=&b; printf("Bitte eine Zahl eingeben: "); scanf("%i",&a); printf("Bitte eine zweite Zahl eingeben: "); scanf("%i",&b); printf("%i",*ptr3); return 0; } Funktion 2: Code: #include <stdio.h> int main2() { int *ptr1,*ptr2,*ptr3; ptr3= *ptr1 + *ptr2; } Könnt ihr mir sagen, wie ich das richtig mache, oder was ich falsch gemacht habe? Dankeschön MfG GenO + Multi-Zitat Zitieren
#2 10. Dezember 2008 AW: Algorythmen Auslagern [Pointer] Hm, ich verstehe dein Problem nicht ganz. In welcher Verbindung stehen main() und main2()? Code: int main2() { int *ptr1,*ptr2,*ptr3; ptr3= *ptr1 + *ptr2; } Du arbeitest hier mit unitialisierten Zeigern -> geht gar nicht. Eine Compiler-Meldung wäre auch sinnvoll. + Multi-Zitat Zitieren
#3 10. Dezember 2008 AW: Algorythmen Auslagern [Pointer] Warum nicht so? Das einlesen hast du ja schon, du schreibst nur eine neue Funktion, die dann die Werte addiert und in dem Hauptprogramm (main) aufgerufen wird Code: int addieren(int a, int b) { return a+b; } int main() { ... int summe = addieren(a,b); .... } + Multi-Zitat Zitieren
#4 10. Dezember 2008 AW: Algorythmen Auslagern [Pointer] Des Weiteren möchte ich anmerken, dass du deine Variablen (auch Zeiger sind Variablen!) INNERHALB der Funktion deklarierst. Diese Variablen sind dann auch nur INNERHALB der Funktion vorhanden!. Weiterführend zu bedenken gebe ich dir auch noch folgendes: Code: int i=1; void main() { f1( 4 ); } void f1(int i) { int i = 3; printf("%d", i); // ergibt dann dementsprechend 3 (nicht 1 oder 4!). } + Multi-Zitat Zitieren
#5 10. Dezember 2008 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: Algorythmen Auslagern [Pointer] das was ich geschrieben hab war einfach nur try and error prinzip... nur wie bekomm ich es jetzt gebacken, ptr1 und ptr2 in die Funktion 2 zu übertragen und den ptr3 dann wieder in meine Funktion 1 zu kopieren? das programm lässt sich ausführen, bis zu der stelle, an der er die beiden zahlen zusammen zählen soll... dann kommt: MfG ***edit*** hui die antworten kommen ja schneller als meine... hehe so ich les mir dann mal alles durch... irgendwie check ichs noch net so ganz... ich will einfach nur 2 eingaben auslagern (mit pointern), bearbeiten lassen und zurückschicken... der sinn der aufgabe besteht einfach nur darin, klar weiß ich, dass man das auch in eine funktion packen kann... //bin erst mal weg lernen werde dann später nochmal drüber schaun... danke schonmal soweit... + Multi-Zitat Zitieren
#6 10. Dezember 2008 AW: Algorythmen Auslagern [Pointer] naja du könntest einfach die beiden werte die du zusammenzählen willst als funktionsparameter mitgeben und die eine funktion berechnet dir die summe draus und gibt wieder nen pointer zurück. ich denke der sinn der übung läuft aber auf folgendes hinaus oder? call by value / reference sehr wichtig ! @ C/C++ - tutorials.de: Tutorial, Forum, Anleitung & Hilfe + Multi-Zitat Zitieren
#7 11. Dezember 2008 AW: Algorythmen Auslagern [Pointer] Code: #include <stdio.h> #include <stdlib.h> int rechnen(int c, int d) //Nebenfunktion; 2 Variablenwerte werden vom main übergeben, also müssen wa auch 2 deklarieren zum auffangen. { int summe; //Dient nur zum Rechnen summe= c + d; return summe; } int main() //Hauptfunktion { int a,b,ergebnis; printf("Bitte eine Zahl eingeben: "); scanf("%i",&a); printf("Bitte eine zweite Zahl eingeben: "); scanf("%i",&b); ergebnis=rechnen(a,b); //a und b Werte werden übergeben printf("%i",ergebnis); system("Pause"); return 0; } so sollte es funzen. das ist aber nur call by value glaub ich. damit kann man nur ein wert zurück geben. wenn du mehrere werte zurückgeben möchtest, musst du mit pointervariablen bzw. mit den adressen arbeiten. call by reference oder so schimpft sich das. aber für deine zwecke reicht das hier. Mfg Schmidt! Edit: Call by reference (mit Pointern) Code: #include <stdio.h> #include <stdlib.h> void rechnen(int *a,int *b,int *ergebnis) //Nebenfunktion { *ergebnis = *a + *b; } int main() //Hauptfunktion { int a,b,ergebnis; printf("Bitte eine Zahl eingeben: "); scanf("%i",&a); printf("Bitte eine zweite Zahl eingeben: "); scanf("%i",&b); rechnen(&a,&b,&ergebnis); printf("Ergebnis: %i\n",ergebnis); system("Pause"); return 0; } + Multi-Zitat Zitieren