Meine Herren!
Hach, wehowei. Dennis Ritchie und seine Mitstreiter hatten Ahnung von dem, was sie taten. PHP hingegen ist ein ohne Sinn und Konzept zusammengeschusterter Haufen Scheiße.
Ich bin auch kein PHP-Fan, aber diese Aussage halte ich für stark überzogen. PHP würde ursprünglich als Programmiersprache für didaktische Zwecke entwickelt. Deshalb kennt PHP vermutlich auch so komplizierte Gebilde wie Zeiger und statische Typisierung nicht. Heute wird PHP als Programmiersprache für den breiten Produktiv-Einsatz vor allem im Web-Bereich weiterentwickelt und hat sich da gut positionieren können. Diesen Aufgabenbereich erfüllt PHP m.M.n. auch besser als C das könnte. Ich jedenfalls würde ungern die Geschäftslogik einer Webseite mit C entwickeln wollen, ebenso würde ich sehr ungern einen Microkontroller mit PHP programmieren wollen.
Das sieht irgendwie ein wenig aus wie C, aber das war's auch schon.
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.
Also bitte: Tieferes Verständnis für PHP wirst du aus C nicht erlernen.
Er wird Referenzen zu schätzen lernen ;)
Aber davon mal abgesehen: Die beiden Sprachen unterscheiden sich zudem in den technischen Grundlagen. Das eine wird in Maschinencode übersetzt, das andere ist eine Interpretersprache.
Ob eine Sprache interpretiert oder kompiliert wird ist keine Eigenschaft der Sprache, sondern der Umgebung. Man kann C ebenso interpretieren, wie man PHP kompilieren kann. In der Praxis wird C aber meistens kompiliert und PHP interpretiert.
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'.
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.