verständnissfrage

#1669955
Lesenswert?

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
#1670009
Lesenswert?

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
(Firma: Nisch-Aufzüge) Persönliche Seite #1670036
Lesenswert?

"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.
#1670116
Lesenswert?

> "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!
Gast #1670681
Lesenswert?

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.

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