「*p」と「(*p)」の違いは次のとおりです。 1. 「*p」は p が指す単位の値を示し、p は次の単位を指します。 pは1ずつ増えます。 「*p」は次のアドレスを指します。 2. 「(*p)」は、*p が指すデータの値に 1 を加算することを意味します。
このチュートリアルの動作環境: 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 サイトの他の関連記事を参照してください。