- ベストアンサー
char *p[20];
char *p[20]; これはchar* p[20];だからポインタが20個の配列だと分かりますが char *(p[20]);と書いても全く同じなのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
同じですね。 普通は、あまり括弧付けませんけど・・・ 一応、説明を試みておきます。 *p[20] の「*」と「[]」ですが、この二つの演算子では、優先順位が、「[]」の方が高くなります。(添え字演算子と言うのは、ほとんど最高の優先順位です。これより上の優先度を持つのは、C++のスコープ解決演算子、「::」しかありません。) よって、括弧をつけると、*(p[20])となります。 解読するときは、 ・pは、20個の配列です。(配列の演算子が優先順位高いですから、ここから始まります。) ・この配列は、ポインターの配列です。 ・このポインターは、char へのポインターです。 の順番になります。 括弧を付けると、括弧内の所から読み始めますから、やっぱり、結果は同じです。
その他の回答 (1)
noname#6715
回答No.1
Cには詳しくないのですが違うものだと思います 少なくてもVB.NETでは http://www.microsoft.com/japan/msdn/net/vbnetref/vbnetref3-3.asp と扱われるようなので *p[20]はポインタ20個だとすれば *(p[20])は配列全体を示すポインタだと思います
お礼
ありがとうございます。 結果だけでなく、説明も少し理解することができました。