Pointer auf Struct als Rückgabewert einer Funktion
-
Hallo Leute,
bin gerade dabei meine C-Kenntnisse zu erweitern und habe eine Frage bezüglich des unten angebenen Codes. Das Programm läuft zwar allerdings frage ich mich wie man es effizienter machen kann. Was mich stört ist, dass ich einmal in der Main einen Pointer auf eine Struct deklariere(dieser Pointer ist der Rückgabewert der Funktion) und nochmal in der Funktion denselben Pointer deklariere. Gibt es da evtl. einen besseren Weg? Danke im Voraus!
Hier ist der Code:
#include <stdio.h> typedef struct { int x; int y; } test; test* calc( test* ); int main( void ) { setvbuf(stdout, NULL, _IONBF, 0); test myInput, *myInputPtr = &myInput, *myOutputPtr; printf( "Geben Sie einen Integer ein : "); scanf( "%i", &myInputPtr -> x ); printf( "Geben Sie einen Integer ein : "); scanf( "%i", &myInputPtr -> y ); myOutputPtr = calc( myInputPtr ); printf( "\nDie Summe der eingebenen Werte ist %i", myOutputPtr -> x ); printf( "\nDie Differenz der eingebenen Werte ist %i", myOutputPtr -> y ); return 0; } test* calc( test *myInputPtr ) { static test myOutput, *myOutputPtr = &myOutput; myOutputPtr -> x = myInputPtr -> x + myInputPtr -> y; myOutputPtr -> y = myInputPtr -> x - myInputPtr -> y; return myOutputPtr; }
-
Fühlen wir uns heute ein bisschen indirekt? (Und voller Leerzeichen?)
#include <stdio.h> typedef struct { int x; int y; } test; void calc(test *myInputPtr) { myInputPtr->x += myInputPtr->y; myInputPtr->y = myInputPtr->x - 2*myInputPtr->y; } int main() { test myTest; printf("Geben Sie einen Integer ein : "); scanf("%i", &myTest.x); printf("Geben Sie einen Integer ein : "); scanf("%i", &myTest.y); calc(&myTest); printf("\nDie Summe der eingebenen Werte ist %i", myTest.x); printf("\nDie Differenz der eingebenen Werte ist %i\n", myTest.y); return 0; }
-
Man kann es mit den Zeigern, so wie du sie gebrauchst, auch übertreiben.
Extra einen Zeiger zu definieren um ihn dann auf die unmittelbar zuvor definierte Variable zeigen zu lassen, bringt wenig, zumal ein Adressoperator auf die Variable ebenso funktioniert.#include <stdio.h> typedef struct { int x; int y; } test; void calc( const test*,test* ); int main( void ) { setvbuf(stdout, NULL, _IONBF, 0); test myInput, myOutput; printf( "Geben Sie einen Integer ein : "); scanf( "%i", &myInput.x ); printf( "Geben Sie einen Integer ein : "); scanf( "%i", &myInput.y ); calc( &myInput, &myOutput ); printf( "\nDie Summe der eingebenen Werte ist %i", myOutput.x ); printf( "\nDie Differenz der eingebenen Werte ist %i", myOutput.y ); return 0; } void calc( const test *myInputPtr, test *myOutputPtr ) { myOutputPtr -> x = myInputPtr -> x + myInputPtr -> y; myOutputPtr -> y = myInputPtr -> x - myInputPtr -> y; }
-
Danke für die %110-zufriedenstellende Antwort, Wutz! Genau danach hatte ich gesucht!