Übergabe eines Pointers auf einen Array in C

Herakles

Profifragensteller
Moin!

Mich plagt ein C-Verständnisproblem.

Ich habe einen Array und möchte den Pointer auf den Array übergeben an eine Unterfunktion.

Code:
u_char data[4000];

// (belegung von data[] mit werten...)

// nun der Funktionsaufruf der Funktion "manager" mit der Übergabe des Pointers:
manager( &data );

Jetzt fehlt noch die Funktion selbst:

Code:
int manager( u_char *data_aus_main[] ) {
// (C-Code in abermillionen Zeilen) ;-)
}

Nun wird mir beim Kompilieren gemeldet, dass ich einen falschen Zeigertyp übergeben würde. Wenn ich mir das aber mit Verstand anschaue, dann initialisiere ich zunächst einen Array mit 4000 Elementen vom Typ u_char. Den Pointer auf diesen Array übergebe ich beim Funktionsaufruf manager( &data ).

Die Funktion manager() erwartet nun einen Pointer auf einen Array vom Typ u_char, oder bin ich zu blöd? ;-)

Wo liegt mein Fehler?

Danke für jeden Tipp,

Herakles
 
Code:
u_char data[4000];
manager( &data );

Jetzt fehlt noch die Funktion selbst:

Code:
int manager( u_char *data_aus_main[] ) {...}

Ein Array ist in C immer schon ein Pointer.
Die Signatur von deiner manager Funktion erwartet aber ein Array aus pointern.
Also so abaendern:
Code:
int manager( u_char *data_aus_main ) {...}

Edit:
Warscheinlich willst du auch noch die groesze dienes Arrays uebergeben...

Code:
int manager( u_char *data_aus_main, size_t len) {...}
 
Zuletzt bearbeitet:
Vielen Dank und herzlich Willkommen bei den *BSD-lern hier im Forum!

Wenn also nun ein Array immer schon ein Pointer ist, dann muss der Aufruf der Funktion auch angepasst werden, richtig?

Code:
manager( data );

data ist ja hier schon ein Pointer, wenn ich Dich richtig verstehe und der Funktionsaufruf ist in der Tat ein "call by reference", richtig?

Herakles

[EDIT]
Ja, die size wird auch übergeben, hab das nur in dieses "vereinfachte" Beispiel nicht reingeschreiben ;-)
[/EDIT]
 
Eine Übergabe eines Pointers auf einen Array würde in dem Fall auch keinen Sinn machen:

Der Array liegt im Stack der Funktion main, warum sollte man also die Adresse ändern wollen? Ein Zugriff danach wäre ein wenig erschwert (denn du würdest "data" ändern, der aber 4000 Bytes im Stack zugewiesen bekam).

Wenn du wirklich einen Pointer ändern möchtest, dann müsstest du eine neue Variable anlegen, z. B. u_char *p:

Code:
u_char
manager(char **data)
{
        *data = NULL;
}

int
main(int argc, char **argv)
{
        u_char data[4000];
        u_char *p = data;
        manager(&p);
}

Allerdings bezweifel ich mal, dass du tatsächlich vorhattest, die Adresse des Arrays zu manipulieren. ;)
 
pointer ist eindimensional
manager erwartet etwas zweidimensionales.

das hier ist glaube ich das was du machen wolltest:
Code:
void manager(unsigned char* data)
{
    bla
    fasel
    troet

}

aufruf()
{
   unsigned char data[4000];

   manager(&data[0]);
   manager(&data[1000]);
   manager(&data[2000]);
}
 
Zurück
Oben