C-Grundlagen übersicht

Gast #1903404
Lesenswert?
• ▲
▼
Hi,

hat von euch jemand eine liste mit den Grundlagen zu C (Hardware nah).

sitz gerade vor nem problem. Wie kann ich ein Array aus ner Funktion 
zurück geben lassen? (Datentyp ist BYTE).

Damit ich an solchen dingen nicht allzu lang hängen bleibe, würde ich 
mir so eine liste wünschen, kennt von euch jemand eine im netz?

gruß
miri
Gast #1903408
Lesenswert?
• ▲
▼
Miriam schrieb:
> Wie kann ich ein Array aus ner Funktion
> zurück geben lassen? (Datentyp ist BYTE).

das hat erstmal nicht mit Hardware zu tun.

Wer legt den Speicher für das Array an? In C kann man nur zeiger 
zurückgeben du darst aber auf keinen fall ein zeiger auf ein lokales 
array zurückgeben!
Gast #1903449
Lesenswert?
• ▲
▼
das bedeutet, dass ich gar kein array in einer funktion erzeugen kann 
und dann durch aufruf der funktion den wert einer anderen funktion 
übergeben kann?

beispiel:

BYTE * meineFunktion()
{
    BYTE meinArray[8] = {1,2,3,4,5,6,7,8};
    return meinArray;
}

void andereFunktion()
{
     BYTE Array[8] = meineFunktion();
}

das funktioniert dann wohl nicht, oder? wie löse ich dann dieses 
problem?

v.g. miri
Gast #1903456
Lesenswert?
• ▲
▼
es kommt darauf an wo man programmiert. Auf einem PC würde man es soch 
machen

BYTE * meineFunktion()
{
    BYTE* meinArray = (BYTE*)malloc( sizeof(BYTE)*8 );
    return meinArray;
}
Aber jetzt muss auch noch jemand den Speicher mit free freigeben!!!!

Willkommen bei C


auf einem µC könnte man es so machen


void meineFunktion(BYTE* a)
{
    a[1] = 42;
}


BYTE meinArray[8];
meineFunktion( meineFunktion );
Gast #1903522
Lesenswert?
• ▲
▼
@ Peter:

Funktioniert die PC Version nicht auch auf einem µC?


2. Bist du Sicher, dass der Speicherplatz auch nach dem Verlassen der 
Funktion noch für diesen Speicherbereich reserviert ist? Wenn ja, kann 
man ihn außerhalb der Funktion wieder freigeben? Z.B.:

temp = meineFunktion();
free(temp);
Persönliche Seite #1903598
Lesenswert?
• ▲
▼
Wolfgang Bengfort schrieb:
> Autonomer Alkoholiker schrieb:
>> @ Peter:
>>
>> Funktioniert die PC Version nicht auch auf einem µC?
>>
> Für malloc() brauchst Du ein Betriebssytem (oder Du musst Dir die
> malloc-Funktion selbst schreiben).
> Dann geht's auch auf einem uC.

Naja ganz so ist dem nicht, malloc kann man mit z.B. der avr-libc 
verwenden, das ist eine Library-Implementierung, die auf dem Heap 
arbeitet. Bei einem AVR macht das aber nur Sinn, wenn entsprechend viel 
Speicher vorhanden ist, also typischerweise externer Speicher.

Gruss,
Michael

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.