Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen *p++ und (*p)++?

Was ist der Unterschied zwischen *p++ und (*p)++?

醉折花枝作酒筹
醉折花枝作酒筹Original
2021-07-09 11:47:2256251Durchsuche

Der Unterschied zwischen „*p++“ und „(*p)++“ ist: 1. „*p++“ gibt den Wert der Einheit an, auf die p zeigt, und p zeigt auf die nächste Einheit, das heißt, p erhöht sich um 1. „*p++“ bezieht sich auf die nächste Adresse. 2. „(*p)++“ bedeutet das Hinzufügen von eins zum Wert der Daten, auf die *p zeigt.

Was ist der Unterschied zwischen *p++ und (*p)++?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, C++17-Version, Dell G3-Computer.

Differenz:

1. *p++ gibt den Wert der Einheit an, auf die p zeigt, und p zeigt auf die nächste Einheit, d. h. p erhöht sich um 1. *p++ bezieht sich auf die nächste Adresse.

2. (*p)++ bedeutet das Hinzufügen von eins zum Wert der Daten, auf die *p zeigt.

Der C-Compiler betrachtet * und ++ als Operatoren mit derselben Priorität und wird von rechts nach links kombiniert, sodass ++ in *p++ nur auf p wirkt und dieselbe Bedeutung wie *(p++) hat ( In *p)++ wirkt ++ auf den Ausdruck *p innerhalb von (), da () eine höhere Priorität als * und ++ hat.

Zum Beispiel:

int x,y,a[]={1,2,3,4,5},*p=a,*q=a;

x=*p++;//Diesen Satz ausführen Nach x=a[0]=1, p=a+1

y=(*q)++;//Nach der Ausführung dieses Satzes ist y=a[0]+1=2, q immer noch=a

Erweiterte Informationen:

Verifizierungsprogramm 1

#include"stdio.h"
void main()
{
int a=2;
int*p=&a;
int*pold;//记录P指向的地址,为了作为比较使用
pold=p;
//-----------原来的信息
printf("原来的a=%d",a);
printf("原来的p=%x",p);
printf("原来的pold=%x",pold);
//----------进行变化
printf("*p++的结果=%d,a的结果a=%d",*p++,a);
printf("地址变化的结果p-pold=%x",p-pold);
}

Programm 2

#include"stdio.h"
void main()
{
int a=2,*p=&a,*q=&a;
printf("%d%d",(*p),a);
printf("%d%d%d%d",(*p)++,*p++,*q++,a);
printf("%d",a);
}

Programm 3:

#include"stdio.h"
void main()
{
int a=2,*p=&a,*q=&a;
printf("%d%d",(*p),a);
printf("%d%d%d",*p++,(*p)++,*q++);
p=&a;q=&a;
printf("%d%d%d%d",a,*p,(*q)++,a);
printf("%d%d%d%d",a,++(*p),++(*q),a);
printf("%d",a);
}

Zusammenfassung:

*p++ besteht darin, zuerst den Wert von *p herauszunehmen und dann p++ zu lassen

(* p) ++ soll zuerst den Wert von *p herausnehmen, sei dieser Wert ++

*(P++) heißt, zuerst den Wert von *p herauszunehmen, sei p++

Also ist *p++ äquivalent zu *( P++)

und die Operation von printf Die Reihenfolge läuft von rechts nach links. Darüber hinaus wird right++ ausgeführt, nachdem der gesamte Operationsausdruck berechnet wurde, und die Ausführungsreihenfolge von right++ ist von links nach rechts. Wenn left++ auf eine Variable trifft, erhöht es sofort den Wert der Variablen.

Überprüfen Sie die Reihenfolge der Operationen von printf

#include"stdio.h"
void main()
{
int a=2;
printf("a++=%d,++a=%d,a++=%d",a++,++a,a++);
printf("a=%d",a);
}

Empfohlenes Tutorial: „C#

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen *p++ und (*p)++?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn