2016-09-15 4 views
-2

Also habe ich etwas entdeckt, das mich für eine Weile nervt. Ich bin noch neu in der C Sprache.Weird Interaktion mit Zeigern in C

Der Code, den ich spreche, ist hier und seine eine Implementierung von strcmp: http://pastebin.com/VeHGm8sD

Die seltsame Sache über dieses Programm ist, dass, wenn Sie 12, die jeweils in den Zeilen ändern 13

*first_string++; // should increment value of char ?? 
*second_string++; 

zu

first_string++; // should increment address 
second_string++; 

Sie beide erhöhen die Adresse jedoch. Wie ist das möglich ?

+1

Lesen Sie auf [Operator Vorrang] (http://en.cppreference.com/w/c/language/operator_precedence). Die Priorität des Post-Increment-Operators befindet sich ganz oben im Diagramm oberhalb des Dereferenzierungsoperators. –

+2

Es ist schwer zu verstehen, was mit '* first_string ++;' gemeint war. Offensichtlich wollten sie 'first_string' erhöhen. Also warum ist das '*' überhaupt da? –

+0

Das ist ein guter Punkt, @DavidSchwartz. Die verlinkte 'strcmp()' Implementierung erscheint ein wenig abgeschlachtet - als ob eine kompakter geschriebene Version ungeschickt umgeschrieben worden wäre, um es klarer zu machen. –

Antwort

2

wegen der Vorrangstellung des Bedieners.

Diese Form der Char erhöhen würde:

(*first_string)++; 

oder

++*first_string; 

als @JonathanLeffler hingewiesen. In diesem speziellen Fall ist es nicht wichtig, wenn das Zeichen first_string inkrementiert wird, wenn Sie das Ergebnis durch Abbruch der Anweisung vorzeitig löschen. In allen anderen Fällen, in denen dieser Ausdruck ein Unterausdruck eines anderen Ausdrucks ist, sollten Sie klar verstehen, welche Form von ++ Sie verwenden.

In Ihrem Beispiel hat die *first_string++ Wert und Art des Zeichens, während first_string++ ein Zeiger

+0

Oder '++ * first_string' ... –

+0

Scheint jetzt ziemlich offensichtlich. Anfängerfehler. Ich nahm an, dass * Vorrang hat. Danke Jungs – myheadhurts