Adresse einer Variablen in Funktionsargument zurückgeben

Gast #3971557
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);
Gast #3971564
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.
Persönliche Seite #3971565
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.
#3971570
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.