2017-12-08 4 views
-1

Fall 1:Warum postfixed hat Vorrang vor dem Präfix?

int i = 10; 
int j = i++; 

Hier wird zunächst der Wert von i nach j zugeordnet und als i um 1.

Fall 2 erhöht wird:

int i = 10; 
int j = ++i; 

Hier i ist, erstens um 1 erhöht und dann j zugewiesen.

Also, wenn die Operation von Inkrement zuerst in der Präfixform getan wird, dann warum postfixed hat höhere Priorität als Präfix?

+0

betrachtet zuweisen Der Vorrang eines o Die Durchführung hängt mit der Art der Operation selbst zusammen. –

+0

prefixed = inkrement und zurückgeben, postfixed return und inkrement – geckos

+1

Um .. nicht sicher, warum * das * duplizieren ... –

Antwort

3

Das hat nichts mit der Priorität zu tun (hier) In Pre-Increment ist der zugewiesene Wert der Wert vor dem Nebeneffekt. Für Vorinkrement ist es der Wert nach dem Nebeneffekt.

int i = 10; 
int j = i++; 

Vor Wert von i Inkrementieren ist 10. So j=10 nachdem diese 2-Anweisungen ausgeführt werden.

Hier wird der Wert 11 sein, weil incremenet zuerst erfolgt und dann zugewiesen wird.

+0

Ich denke, die Frage, wenn wir alle Geräusche räumen, ist nur "warum Post Inkrement hat eine höhere Priorität als Pre-Inkrement". Und ich würde sagen - für eine Bequemlichkeit des Schreibens einiger allgemeiner Konstrukte. –

+0

@EugeneSh ..: Aber der Fragekontext ist völlig anders, nicht wahr? – coderredoc

+0

Es ist. Das gibt mir den starken Drang, es zu schließen. –

0

Linux manual Seite von operator definieren als same priority für beide vor/nach increment.

! ~ ++ -- + - (type) * & sizeof  right to left 

Post Schritt Regel zuerst zugewiesen wird und dann erhöhen

int j = i++;// here first whatever i value is there that will be assigned to j 

Pre Schritt Regel erster Zuwachs ist und dann

int j = ++i;//++i itself will change i value & then modfied value will assign to j. 

für zB unter Beispiel

#include<stdio.h> 
int main() 
{ 
     int x = 10; 
     int *p = &x;// assume p holds 0x100 
     printf("x = %d *p = %d p = %p\n",x,*p,p); 
     ++*p++; 
     /** in above statement ++ and * having same precedence,then you should check assocaitivity which is R to L 
      So start solving from Right to Left, whichever operator came first , solve that one first 
      first *p++ came , again solve p++ first, which is post increment,so address will be same 
     *0x100 means = 10 
     now ++10 means = 11 
     **/ 
     printf("x = %d *p = %d p = %p\n",x,*p,p); 
} 
+0

das ist falsch. Hier ist die korrekte Rangfolge-Tabelle: http: //en.cppreference.com/w/c/language/operator_precedence –

+0

ja stimmt, aber was ist der Unterschied s/w beides? jeder Operator, den ich in einer Zeile erwähnt habe, hat alle dieselbe Priorität oder Priorität 1 gemäß dem von Ihnen bereitgestellten Link. Assoziativität ist von rechts nach links, beginnend von rechts nach links, was zuerst kommt, die höchste Priorität unter allen in der Rangfolge 1. – achal

+1

Der Unterschied ist, wenn Sie etwas wie '++ * p ++' tun. –

Verwandte Themen