hallo, ich habe eine verständnissfrage. und zwar wenn ich mit hilfe einer funktion eine große datenmenge ,welche in einen lokalen array sind, zurückgeben möchte und ich dazu nur die adresse des arrays an das aufrufende programm geben . klappt das???
Nö. Das lokale Array gibt es nach Verlassen der Funktion nicht mehr, ergo zeigt deine Adresse ins Nirwana. Oliver
Nein. Das Array wird ja zerstört, sobald die Funktion verlassen wird. Ein Zeiger auf das Array wäre also nicht mehr gültig. Entwerder zu erzeugst das array dynamisch, also z.B. mit malloc() bzw. mit new, falls du mit C++ programmierts und gibts dann den Zeiger zurück. Oder du erzeugst das Array in der aufrufenden Funktion und übergibst einen Zeiger (noch besser Referenz bei C++) an die Funktion, die die Daten dann rein schreibt. Gruß Thomas
vielen dank und wenn ich nun ein großes array an eine fkt als parameter übergeben wil so dass sich die daten in der funktion nicht ändern. wie mache ich das
genau so. Du schreibst einfach nichts in da Array. Lesen kannst du ja. Sicherheitshalber kannst du den Parameter noch als "const" deklatieren. Dann bekommst du eine Compilermeldung, wenn du versuchst, das Array zu verändern. Gruß Thomas
So z.B.:
1 | void ftk (const char* arr) |
2 | {
|
3 | arr[0] = 0; //Fehler!! |
4 | }
|
5 | |
6 | char x[100]; |
7 | ftk (x); |
Wie groß dein Array ist, spielt dabei keine Rolle! @Winfried J.: Mit static beschränkst du dich aber auf eine Datei und verhinderst nicht, dass die Daten verändert werden! VLplayer wollte aber wissen, wie man das ganze an eine Funktion übergibt. Gruß Thomas
"global" sollte es vonn überall erreichbar machen "static" rettet das array von einem Aufruf zum Nächsten gegen überschreiben ist es so zwar nicht geschützt Aber der Zugriff per Zeigerübergabe ist möglich. Was die funktion damit macht bestimmt deren Funktionsdefinition. Nur das Array zerstören (destroy) kann sie nicht. Lediglich dessen Inhalt kann sie muss sie aber nicht ändern. "const" bringt nur etwas wenn der Arrayinhalt nie verändert werden soll! Ein Datensatz welcher bereits in einem Array vorliegt in ein locales const Array zu kopieren frist nur Rechenzeit und Speicher.
> "global" sollte es vonn überall erreichbar machen Nur dass ich richtig bin. Wir reden hier von C? Weder in C noch C++ kenn ich eine "global"-Definition. > "static" rettet das array von einem Aufruf zum Nächsten "static" beschränkt den Zugriff der Variable auf das aktuelle Modul. Ein Zugriff über "extern" von einem anderen Modul ist nicht möglich. > Aber der Zugriff per Zeigerübergabe ist möglich. Was die funktion damit > macht bestimmt deren Funktionsdefinition. Nur das Array zerstören > (destroy) kann sie nicht. Lediglich dessen Inhalt kann sie muss sie aber > nicht ändern. Du kannst in einer Funktion dynamisch erzeugte Arrays sehr wohl zerstören, die durch einen Pointer übergeben wurden! > "const" bringt nur etwas wenn der Arrayinhalt nie verändert werden soll! Genau darum gehts VLplayer ja. Und um sicher zu sein, dass er nicht versehentlich doch rein schreibt, kannn er den Parameter "const" machen. Dann bekommt er beim compilieren eine Fehlermeldung. > Ein Datensatz welcher bereits in einem Array vorliegt in ein locales > const Array zu kopieren frist nur Rechenzeit und Speicher. Hat ja auch niemand gesagt. Deswegen soll er ja einen Zeiger übergeben!
Winfried J. schrieb: > "global" sollte es vonn überall erreichbar machen Wozu? > "static" rettet das array von einem Aufruf zum Nächsten Das klingt, als ob du das auf eine lokale Variable beziehst, nicht auf eine globale. > "const" bringt nur etwas wenn der Arrayinhalt nie verändert werden soll! Falsch. > Ein Datensatz welcher bereits in einem Array vorliegt in ein locales > const Array zu kopieren frist nur Rechenzeit und Speicher. Warum sollte man ihn kopieren? Man übergibt einfach einen Zeiger auf const, schon ist es dort, wohin man es übergibt, nicht beschreibbar.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.