ホームページ  >  記事  >  バックエンド開発  >  *p++ と (*p)++ の違いは何ですか

*p++ と (*p)++ の違いは何ですか

醉折花枝作酒筹
醉折花枝作酒筹オリジナル
2021-07-09 11:47:2256412ブラウズ

「*p」と「(*p)」の違いは次のとおりです。 1. 「*p」は p が指す単位の値を示し、p は次の単位を指します。 pは1ずつ増えます。 「*p」は次のアドレスを指します。 2. 「(*p)」は、*p が指すデータの値に 1 を加算することを意味します。

*p++ と (*p)++ の違いは何ですか

このチュートリアルの動作環境: Windows 7 システム、C 17 バージョン、Dell G3 コンピューター。

違い:

1. *p は p が指す単位の値を示し、p は次の単位を指します、つまり、p は 1 ずつ増加します。 *p は次のアドレスを指します。

2. (*p) は、*p が指すデータの値に 1 を加算することを意味します。

C コンパイラは * と を同じ優先順位の演算子とみなし、これらは右から左に結合されるため、*p は p に対してのみ動作し、( ( の *(p); と同じ意味を持ちます) *p)、() は * より優先度が高いため、() 内の式 *p に作用します。

例:

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

x=*p ;//この文を実行すると、x=a[0]=1, p=a 1

y=(*q);//この文を実行すると、y=a [ 0] 1=2, qstill=a

拡張情報:

検証プログラム 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);
}

プログラム 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);
}

手順 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);
}

まとめると、

*p は最初に *p の値を取り出し、次に p

(*p) に取ります。 *p の値を最初に取り出し、この値

*(P) を最初に *p の値を取り出し、p

とします。したがって、*p は *(P と同等です) )

と printf 実行順序は右から左です。また、右側は演算式全体を計算した後に実行され、右側の実行順序は左から右の順となる。 left が変数に遭遇すると、変数の値を直ちに増加させます。

printf の操作順序を確認する

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

推奨チュートリアル: "C#"

以上が*p++ と (*p)++ の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。