Zeigerfelder
-
Hallo,
ich hab da mal wieder ein paar Fragen bezüglich Felder(hier char-Felder):
Wenn ich ein Zeigerfeld deklariere, warum muß ich dann die Anzahl der Elemente explizit angeben und kann die Größe nicht über eine gleichzeitige Zuweisung einer Zeichenkettenkonstanten bestimmen ???Auf Deutsch:
Warum geht das:char feld[]="Hallo";
aber nicht das:
char *feld[]="Hallo";
???
Zweite Frage: Wie kann man den auf die einzelnen Elemente von so einem Zeigerfeld zugreifen ?
Normalerweise ist ja z.b.
feld[3] das vierte Element, hier also das zweite 'l'.
Aber wenn "feld" als Zeiger deklariert ist, klappt das
net->Speicherverletzung.
Ich bin über jede Hilfe dankbar, schließlich is das
ja was ziemlich Elementares !
Gruß
KonstantinP.S.:ich hab hier mal den Quellcode von nem kleinen Programm dazu gepostet, damit's etwas anschaulicher wird:
//main.cpp #include <iostream.h> char *testfeld[64]; //WARUM GEHT NICHT : //1. // char *testfeld[]="Hallo"; //??????????? int main() { *testfeld="Hallo"; //2. cout<<*testfeld[3]; //Warum geht das nicht ????? return 0; }
-
char array[]="Hallo";
das ist ein string (array of char - ein feld aus char)
char* array[];
das ist ein string array (array of char* - ein feld aus strings)lies dir mal n tutorial dazu durch: A Tutorial on Pointers and Arrays in C
-
char *feld[]="Hallo";
Geht nicht, weil du ein Array von char-Zeigern nicht mit einem char-Zeiger initialisieren kannst. int a[] = 42; geht ja auch nicht ... aber so gehts:
char *feld[] = { "Hallo", "Welt", "!" /* , ... */};
char *testfeld[64]; int main() { *testfeld="Hallo"; cout<<*testfeld[3]; //Warum geht das nicht ????? return 0; }
Geht nicht, weil du die Operatorrangfolgen durcheinanderbringst. Du hast ein Array von 64 Pointern auf char, aber nur testfeld[0] zeigt auf einen String, die anderen sind uninitialisiert. Jetzt versuchst du, das erste Zeichen des 4. Strings auszugeben -> Crash. Wahrscheinlich meinst du das vierte Zeichen des 1. Strings:
cout << (*testfeld)[3]; // oder, klarer: cout << testfeld[0][3];
-
hmmmm, also, ich dachte, wenn ich z.b. ein feld
char *feld[4];
deklariere, dann wäre das ein feld, in dem ich vier elemente, also vier zeichen speichern kann, halt nur als zeiger...aber offensichtlich ist das jetzt ein feld, in dem ich vier strings also char-felder speichern kann. das find ich irgendwie unlogisch, denn
char feld[4];
ist doch ein Feld mit vier Elementen, also maximal vierzeichen, die man darin speichern kann.
beichar *feld[4];
, kann ich da vier verschiedene strings speichern??? und wenn ja, wodurch wird denn die länge der speicherbaren strings begrenzt???
fragen über fragen....
doch schonmal danke für die antworten=)
gruß
konstantin
-
char feld[4] = [0],[1],[2],[3] //4 mal char char *feld[4]= *[0],*[1],*[2],*[3] //4 mal char *
Devil
[ Dieser Beitrag wurde am 16.06.2003 um 21:01 Uhr von devil81 editiert. ]
-
ethereal: Ich glaub das bringt erstmal nichts dir solche Fragen zu stellen, solange du nicht verstanden hast was ein simpler Pointer ist. Ich weiß leider nicht wie gut der Link ist, den Shade gepostet hat ...
An sich ist nämlich ein Pointer in einem Array wie char *foo[10]; auch nur ein ganz normaler char-Pointer (nur dass man eben gleich 10 davon hat.)