Forum: Mikrocontroller und Digitale Elektronik Adresse einer Variablen in Funktionsargument zurückgeben


von sun (Gast)


Lesenswert?

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);

von Max H. (hartl192)


Lesenswert?

Das geht mit einem Doublepointer z.B. so:
1
void Funktion(int **Adresse)
2
{
3
  // ...
4
  *Adresse = address_to_return;
5
}

von Auch Gastlich (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Max H. (hartl192)


Lesenswert?

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
Noch kein Account? Hier anmelden.