Mechthild: C - Zeigerfrage Array

Beitrag lesen

Hi!

Das stimmt, aber das würde ich nicht als reinen Nachteil von PHP betrachten. Die C-Syntax-Familie schlägt weite Wurzeln und erleichtert Entwicklern den Umstieg zwischen Sprachen dieser Familie. Auf der anderen Seite verleitet es auch dazu, die Details verwandter Konzepte in unterschiedlichen Programmiersprachen zu übergehen.

ich finde PHP für Websachen auch vollkommen i.O. Besser als Perl zumindest. Wobei Perl mit Sicherheit die bessere Sprache ist. Zum Entwickeln habe ich Java immer sehr geschätzt, aber Java ist halt auch wieder ziemlich top level im Vergleich zu C. Und irgendwas gefällt mir an Java trotzdem nicht, alles sehr umständlich irgendwie.

Mit einer Zeichenkette ist das einfach zu verstehen:

Buchstabe: abcdefg

Byte:      0123456


> > Die Zeichenkette belegt sieben aufeinanderfolgende Bytes im Speicher. Das c erreichst du, indem du die  Startadresse der Zeichenkette nimmst und 2 hinzuaddierst.  
>   
> Bemerkenswert hierbei ist, dass C die Größe der Elemente automatisch beim inkrementieren berücksichtigt. Das obere Beispiel funktioniert folglich auch, wenn ein Zeichen in der Zeichenkette mehrere Bytes belegen würde. Also angenommen ein Zeichen bräuchte zwei Bytes. Dann müsstest du, um das 'c' zu erreichen eigentlich zwei mal die Datengröße von 2 Bytes auf die Startadresse addieren. C weiß aber, dass ein Element in der Zeichenkette zwei Bytes belegt und kann diese Berechnung automatisch vornehmen. Das heißt `*(Startadresse + 2)`{:.language-c} dereferenziert die Adresse, an der das Low-Byte des Zeichen 'c' abgespeichert. Beim Dereferenzieren wird wiederum Rücksicht auf die Datengröße genommen und man erhält die zwei Byte große Zeichenkette 'c'.  
  
Das probiere ich heute abend mal aus... hört sich interessant an. Wenn ich also ein Dokument als utf-8 kodiere und eine Zeichenkette "aä" wähle, die folglich 3 Bytes lang ist, dann sollte das funktionieren. Teste ich mal.  
  

> Der Datentyp int hat auf 32-bit Systemen eine Speicherverbrauch von 4 Bytes. Da dein Pointer auf das Array, die Information mit sich trägt, dass es sich bei den Elementen um int-Werte handelt, weiß C, dass es pro Element 4 Bytes weiter im Speicher zu operieren hat.  
>   
> Galileo Computing bietet imho. eine [gelungene Einführung](http://openbook.galileocomputing.de/c_von_a_bis_z/012_c_zeiger_001.htm#mjee28a882ef9125d2c4cc49121b2c65c1) zu Zeigern in C.  
  
Danke für den Tip! Galileo Computing ist immer recht gut, stimmt.