• ベストアンサー

char *p[20];

char *p[20]; これはchar* p[20];だからポインタが20個の配列だと分かりますが char *(p[20]);と書いても全く同じなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

 同じですね。  普通は、あまり括弧付けませんけど・・・  一応、説明を試みておきます。  *p[20] の「*」と「[]」ですが、この二つの演算子では、優先順位が、「[]」の方が高くなります。(添え字演算子と言うのは、ほとんど最高の優先順位です。これより上の優先度を持つのは、C++のスコープ解決演算子、「::」しかありません。)  よって、括弧をつけると、*(p[20])となります。    解読するときは、 ・pは、20個の配列です。(配列の演算子が優先順位高いですから、ここから始まります。) ・この配列は、ポインターの配列です。 ・このポインターは、char へのポインターです。  の順番になります。  括弧を付けると、括弧内の所から読み始めますから、やっぱり、結果は同じです。

Slihpon
質問者

お礼

ありがとうございます。 結果だけでなく、説明も少し理解することができました。

その他の回答 (1)

noname#6715
noname#6715
回答No.1

Cには詳しくないのですが違うものだと思います 少なくてもVB.NETでは http://www.microsoft.com/japan/msdn/net/vbnetref/vbnetref3-3.asp と扱われるようなので *p[20]はポインタ20個だとすれば *(p[20])は配列全体を示すポインタだと思います

関連するQ&A

専門家に質問してみよう