Array übergabe an Funktion

Gast #5329935
Lesenswert?
• ▲
▼
Moin,

wodrin besteht der Unterschied ob Ich jetzt die Variable innerhalb der 
Funktion
an einer anderen Funktion übergebe via. Adresse oder ob Ich die Variable 
("b")
außerhalb deklariere und diese dann an die Funktion übergebe?

Wenn Ich es innerhalb der Funktion mache, kommt nur Blödsinn bei raus.
Stimmt da was mit der Adressübergabe nicht?
1
void bearbeite(uint8_t *in)
2
{
3
  ..
4
}
5

6
// So funktioniert das nicht..
7
void varinFunc()
8
{
9
  uint8_t b[10][10]; 
10
  
11
  bearbeite(&b[0][0]);
12
}
13

14
// So funktioniert es..
15
uint8_t b[10][10];
16
void varinFunc()
17
{  
18
  bearbeite(&b[0][0]);
19
}
Gast #5329936
Lesenswert?
• ▲
▼
Bei jedem Funktiosnaufruf von varinFunc() steht im Array "b" nur 
Zufallswerte drin, weil "b" bei jedem Aufruf neu angelegt wird.

Wenn du "b" ausserhalb von varinFunc anlegst, ist dies eine globale 
Variable und behält seine Gültigkeit dauerhaft.

Wenn "b" innerhalb von varinFunc seine Werte behalten soll, nachdem die 
Funktion zu Ende ist, muss "b" mit "static" versehen werden.
Gast #5329963
Lesenswert?
• ▲
▼
Elisa W. schrieb:
> // So funktioniert das nicht..
> void varinFunc()
> {
>   uint8_t b[10][10];
>
>   bearbeite(&b[0][0]);
> }
Wenn Ich jetzt in der Funktion das Array initalisiere und damit 
definierte Werte an den Positionen schreibe, ist es nach wie vor noch so 
das die Übergabe nicht korrekt funktioniert.
Gast #5330252
Lesenswert?
• ▲
▼
Doch, sofern er es nicht durch fehlerhaften Code zerstört, wird das 
Array nur in der Funktion auf einer festen Speicheradresse genutzt, also 
nach Ablauf der Funktion nicht wieder zum Fraß vorgeworfen und bleibt 
bestehen.

Er kann die Speicheradresse natürlich nach aussen weitergeben. Dann 
liegt es aber an ihm, wenn Murks reingeschrieben wird.
#5330434
Lesenswert?
• ▲
▼
Nils N. schrieb:
> Doch, sofern er es nicht durch fehlerhaften Code zerstört, wird das
> Array nur in der Funktion auf einer festen Speicheradresse genutzt

Dagegen sage ich ja nichts aber ich könnte extern z.B. einen Zeiger 
haben, der auf den Speicherbereich des Arrays zeigt, und damit alle 
Werte dort ändern/löschen. Das muss kein fehlerhafter Code sein.
Zudem hat das Wörtchen static auch noch eine andere Bedeutung wie man im 
Link nachlesen kann ;)
Gast #5330486
Lesenswert?
• ▲
▼
Code Mitleser schrieb:
> ei einem "kleinem" Controller (mit ebensolchen Stack-Design)
> könnte es schon mal vorkommen dass bei einem funktions-
> lokalem Array dieser Grösse der Stack überläuft.

Das muss aber ein wirklich kleiner Controller sein, wie man ihn 
heutzutage nicht mal mehr für eine Ampelsteuerung einsetzt.

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.