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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren