array's
-
hi
schnelle frage zu array's: das ist eigentlich nichts anderes als eine ansammlung von indixierten zeigern des datentyps oder? also:
char myarray[5];bedeutet nichts anderes, als das 5 char zeiger* in einem index festgehalten werden, die auf ein char zeigen oder?
folgendes ergibt mir aber nicht ganz sinn:
char *myarray;das ist im grundegenommen ein zeiger auf den typ char, und jetzt: kann aber als myarray[] intrerpretiert werden. stimmt doch oder? macht ja auch sinn, weil es umgekehrt formuliert mein obiges beschreibt. denn für einen wert zugriff wäre *****myarray identisch mit myarray[n], wobei beim ersten schätzungsweise alle zeigerwerte geändert werden, beim zweiten aber nur die erste position. oder? nur: warum funktioniert dann folgendes nicht:
//geht nicht int *my_pintarray = 100; //gleiche schreibweise, anderer typ - es geht char *my_pchararray = "100"; //geht jetzt auch, aber warum erst speicher alloziieren und bei char* nicht? int *my_pintarray = new int; *my_pintarray = 100; delete my_pintarray; //============================= //geht int my_intarray[5]; my_intarray[0] = 100; //geht char my_chararray[3]; my_chararray[0] = '1'; my_chararray[1] = '0'; my_chararray[2] = '0';
-
noch was:
char *my_pchararray = "abcdef"; //komisch, ich dachte der zeiger operator * muss für einen wertzugriff benutzt werden, //hier aber nicht!!? my_pchararray = "ghij"; int *my_pintarray = new int; //so kenne ich das! *my_pintarray = 100;
-
ist es so: bei char ist es eine ausnahme weil char's immer aus einem einzelnen zeichen bestehen, ein integer wert der aber aus z.b. 5 stellen besteht, braucht nicht ein array dafür und somit ist ein zeiger auf einen int nicht umbedingt gleich ein array, ein zeiger auf ein char aber ist immer gleich ein array aus einzelnen char's weil es eben immer nur ein zeichen sein kann?
so würde das für mich sinn machen.
-
Nein.
Ein Array von 5 chars sind 5 chars und keine 5 Zeiger.
Das mit der Umwandlung von Array zu Zeiger kommt daher, dass ein Array von 5 ints z.B. 5 im Speicher aufeinanderfolgende int Werte sind.
also, wenn a der Zeiger bzw. das array wäre, dann wäre *a das erste Element *(a+- das zweite, *(a+2) wäre das dritte. Und genau das macht der Indexoperator.
a[n] ist das selbe wie *(a+n)
- das zweite, *(a+2) wäre das dritte. Und genau das macht der Indexoperator.
-
//gleiche schreibweise, anderer typ - es geht
char *my_pchararray = "100";Kommt noch aus C-Zeite. Stringliterale sind statisch und können somit auch ohne dynamische Anforderung von Speicher benutzt werden. ( eigentlich ist es const char* ).
Die Benutzung dieser C-Strings sollte vermieden werden, da der Zugriff und Veränderung undefiniert ist. ( Alternative : std::string )
-
Übrigens ist die Mehrzahl von "Array" im Deutschen wie auch im Englischen "Arrays".
-
kann man keinen zeiger auf einen char setzen? mit jedem anderen daten typ geht das, sogar auf bool. aber mit char dann nicht? und danke für den tipp Badestrand (cooler name übrigens

-
Klar kann man einen Zeiger auf ein char haben.
-
@JustAnotherNoob: dann redet man nur bei z.b. vector (also dynamische arrays) von einer ansammlung von zeigern? std::vector<int*> myints; ist das richtig?
normale arrays wie int[5] ist also kein zeiger holder sondern es gibt nur ein zeiger selber, der auf das array zeigt, richtig?
und noch eins: int *myints = new int[5];
das ist eigentlich sowas ähnliches wie ein vector oder? hier werden doch auch wie in einem container, die 5 int zeiger bewahrt oder nicht?
-
Braunstein und wie sieht dann der syntax aus?
-
char* charptr = new char; // oder char ch; char* chptr = &ch;Wie sinnvoll das auch immer sein mag.
-
okay vielen dank euch allen.