Maison > Article > développement back-end > Quelle est la différence entre *p++ et (*p)++
La différence entre "*p++" et "(*p)++" est : 1. "*p++" indique la valeur de l'unité pointée par p, et p pointe vers l'unité suivante, c'est-à-dire que p augmente par 1. "*p++" fait référence à l'adresse suivante. 2. "(*p)++" signifie ajouter un à la valeur des données pointées par *p.
L'environnement d'exploitation de ce tutoriel : système Windows 7, version C++17, ordinateur Dell G3.
Différence :
1. *p++ indique la valeur de l'unité pointée par p, et p pointe vers l'unité suivante, c'est-à-dire que p augmente de 1. *p++ fait référence à l'adresse suivante.
2. (*p)++ signifie ajouter un à la valeur des données pointées par *p.
Le compilateur C considère * et ++ comme des opérateurs de même priorité, et ils sont combinés de droite à gauche, donc ++ dans *p++ n'agit que sur p, et a la même signification que *(p++) ; ( Dans *p)++, puisque () a une priorité plus élevée que * et ++, ++ agit sur l'expression *p dans ().
Par exemple :
int x,y,a[]={1,2,3,4,5},*p=a,*q=a;
x=*p++;//Exécuter cette phrase Après x=a[0]=1, p=a+1
y=(*q)++;//Après avoir exécuté cette phrase, y=a[0]+1=2, q still=a
Informations détaillées :
Programme de vérification 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); }
Programme 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); }
Programme 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); }
En résumé :
*p++ consiste d'abord à retirer la valeur de *p, puis à laisser p++
(* p) ++ consiste à retirer d'abord la valeur de *p, laissez cette valeur ++
*(P++) consiste à retirer d'abord la valeur de *p, laissez p++
Donc, *p++ est équivalent à *( P++)
et le fonctionnement de printf L'ordre va de droite à gauche. De plus, right++ est exécuté après le calcul de l'expression entière de l'opération, et l'ordre d'exécution de right++ est de gauche à droite. Lorsque left++ rencontre une variable, cela augmentera immédiatement la valeur de la variable.
Vérifiez l'ordre des opérations de printf
#include"stdio.h" void main() { int a=2; printf("a++=%d,++a=%d,a++=%d",a++,++a,a++); printf("a=%d",a); }
Tutoriel recommandé : "C#"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!