richtige Verwendung des Pre-Increment-Operators in Kombination mit dem Zeiger-Dereferenzierungsoperator

7

Ich habe gerade die folgende Codezeile geschrieben:

%Vor%

Meine Absicht ist, die Variable count innerhalb der Datenstruktur zu erhöhen, auf die data_ptr zeigt, bevor der Vergleich mit threshold durchgeführt wird, und diese Codezeile funktioniert.

Wenn ich stattdessen data_ptr vor dem Vergleich erhöhen wollte, hätte ich folgendes geschrieben:

%Vor%

Aus Neugier habe ich auch diese Codezeile ausprobiert:

%Vor%

Und festgestellt, dass es genau so wie das erste verhält.

Erste Frage: Warum funktioniert Beispiel # 3 genauso wie Beispiel # 1? Geht es um die Präzedenz von Betreibern? Etwas im Standard? Ich musste ein schnelles Testprogramm schreiben, weil die Antwort für mich nicht offensichtlich war.

Zweite Frage: Soll ich diese if -Anweisung anders schreiben? Ich könnte das Inkrement zuerst in einer eigenen Zeile ausführen und dann die Bedingung testen, um mögliche Verwechslungen zu vermeiden. Ist das notwendig, oder sind die ersten beiden Beispiele für sich allein offensichtlich?

    
e.James 16.12.2009, 21:49
quelle

4 Antworten

11

1) Vorrang

2) Präferenz

    
anon 16.12.2009, 21:55
quelle
5

Ja, das ist eine Frage der Vorrangstellung des Betreibers. Der Pfeiloperator hat eine höhere Priorität als der Inkrementoperator.

Um Ihre zweite Frage zu beantworten, würde ich diese Art von Konstrukt im Allgemeinen in zwei separate Aussagen aufteilen:

%Vor%

Dies betont, was vor sich geht und verhindert mögliche Verwirrung. Dies ist jedoch wahrscheinlich eine Frage der Präferenz.

    
Martin B 16.12.2009 21:54
quelle
5
  1. Die Rangfolge der Operatoren bestimmt das Verhalten, das Sie beobachtet haben.
  2. Es würde nicht sehr weh tun, wenn Sie das Inkrement vom Vergleich in diesem Beispiel trennen, aber manchmal möchten Sie eine Bedingung mit Inkrement in der Mitte einer Sequenz von Bedingungen haben und dann versuchen, das Inkrement vom Test zu trennen kann die Lesbarkeit des Codes beeinträchtigen, indem eine Verschachtelung eingeführt wird, die sonst unnötig wäre.

Zum Beispiel:

%Vor%

Versus:

%Vor%     
Jonathan Leffler 16.12.2009 21:56
quelle
3
  1. Die - & gt; Operator bindet enger als ++.
  2. Sie sind beide klar definiert und ich denke, sie sind leicht zu lesen. Dinge würden nur zweifelhaft, wenn Sie zusätzliche Verweise auf data_ptr in demselben Ausdruck hätten.
ak. 16.12.2009 21:53
quelle

Tags und Links