Maison  >  Article  >  développement back-end  >  Quelle est la différence entre *p++ et (*p)++

Quelle est la différence entre *p++ et (*p)++

醉折花枝作酒筹
醉折花枝作酒筹original
2021-07-09 11:47:2256251parcourir

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.

Quelle est la différence entre *p++ et (*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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn