Hallo, wie kann ich in C in einem Funktionsargument eie Adresse zurückgeben. Im Modul a ist ein Buffer definiert. Modul a hat eine Funktion die der aufrufenden Funktion in Modul b also die Adresse des Buffers in Modul a zurückgeben soll. void Funktion(Adresse); Also im Argument soll die Adresse zurückgemeldet werden und nicht als Rückgabe der Funktion wie ich das bereits kenne. U8 *Funktion(void);
Das geht mit einem Doublepointer z.B. so:
1 | void Funktion(int **Adresse) |
2 | {
|
3 | // ...
|
4 | *Adresse = address_to_return; |
5 | }
|
Das ganze passt eigentlich am besten ins GCC subforum. Aber nun: Du koenntest einen Zeiger auf einen Zeiger uebergeben. Also:
1 | void fn( void **ptr) |
2 | {
|
3 | *prt = adr; // Adresse die du zurueck geben moechtest. |
4 | } |
Ein normaler zeiget geht meiner Erinnerung nach nicht, da eine kopie des Zeigers uebergeben wird.
Diese Art von Werteübergabe nennt man "call by reference", hier ist als Funktionsargument ein Pointer auf den gewünschten Datentyp zu übergeben. Beim Aufruf der Funktion muss als Pointer die Adresse des Objekts übergeben werden, in das das Ergebnis geschrieben werden soll. Hier ist der Adressoperator hilfreich. Soll beispielsweise ein int auf diese Art und Weise transportiert werden, ist ein Pointer auf int zu übergeben. In der Funktion wiederum ist der übergebene Pointer zu dereferenzieren.
1 | void funktion(int* i) |
2 | {
|
3 | *i = 1234; |
4 | }
|
5 | |
6 | ...
|
7 | |
8 | int a; |
9 | |
10 | funktion(&a); |
Dieses grundlegende Prinzip wird immer verwendet, egal, um welchen Datentyp es sich handelt. Ob der Datentyp nun int, char oder auch ein Pointer ist, die Vorgehensweise ist immer die selbe.
Nachtrag: Man sollte aber aufpassen, dass die Adresse nicht auf Speicher im Stack zeigt der nach dem Verlassen der Funktion wieder freigegeben wird. Auch Gastlich schrieb: > Das ganze passt eigentlich am besten ins GCC subforum. Sicher? >> Forum: GCC >> Fragen zu den GNU-Toolchains für AVR-, ARM- und MSP430-Mikrocontroller, >> AVR-GCC, MSPGCC, WinAVR, WinARM, ... für mich sieht das eher wie eine generelle Frage zu 'C' aus, die mit einer GNU-Toolchain nichts zu tun hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.