- ベストアンサー
C言語の文法(変数宣言)について
C言語の文法の質問をさせていただきます。 int hoge; などと宣言しますが、このintというのは型指定子というものでしょうか。 int *piyo; という宣言のintも型指定子でしょうか。 この場合、* はなんと呼ばれるのでしょうか。(アスタリスクという記号です、という回答は期待していません。(^_^;)) ポインタ宣言子、でいいのでしょうか。これは「演算子」ではないんですよね? char c[10]; という宣言の[ ]やその中に入っている10はなんと呼ばれるのでしょうか。 いま、手元に「新ANSI C言語辞典」という本があるのですが、説明を読んでもよくわかりません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
私の場合、演算子と呼ぶのに抵抗があるので、 例えば、「ポインタを宣言する場合は int *piyo のように、宣言子 piyo を * で修飾する」という感じで、ポインタ修飾子と呼んでいますが、定かではありません。 []の中は要素数だと思います。
その他の回答 (3)
補足します。 >(定かではないかもしれませんが、)ポインタ修飾子って言うんですね。 宣言において、* が宣言子の1つであり、さらに細分化して、修飾子と呼ぶ事は一般的だと思います。 * をポインタ修飾子、[] を配列修飾子、() を関数修飾子と記述されているものを見た事はありますが、一般的かどうかという点で、自信はありません。 >演算子って言ったら、演算子の優先順位表ってあるじゃないですか、 >あれを気にしなきゃいけなくなるように思えてくるんです。 宣言にも優先順位はあります。例えば、 int *func(); この宣言には、int, *, func, () の4つの宣言子があって、* と func よりも func と () が優先されるから、これが関数の宣言であると解釈されるわけですよね? int (*func)(); そして、この場合は、* と func が優先されるので、関数へのポインタと解釈されます。どちらの場合も、一般的な演算子の優先順位と同じなので、優先順位があった方が理解しやすいと思います。
補足
>宣言にも優先順位はあります。例えば、 ここ以下の話は、「宣言にも優先順位はあり、その優先順位は演算子の優先順位と同じなので、演算子の優先順位の表を当てはめて考えても支障はないです。」ということですね。
- leaz024
- ベストアンサー率75% (398/526)
# 初めに言ってしまうと、それは「気にすべきではない分野」の1つです(笑) Cでの「宣言」は、「宣言指定子」のリストと「宣言子」のリストで構成されます。 int や char などは「宣言指定子」であり、その中の「型指定子」に分類されます。 また、hoge や *piyo、c[10] は「宣言子」になります。 で、* なんですけど、これはあくまで「ポインタ演算子」です。 宣言で使えば「宣言子としてのポインタ演算子」となるわけです。 別に、演算を行うから演算子、というわけではないようです。 同様に、配列の宣言に使う場合の [ ] や 10 も、* 特別な呼び方はないようです。 [ ] は配列演算子だし、10 は定数式です。 ただし「宣言」においては、これらは「宣言子」の下階層に位置するので、* を「ポインタ宣言子」と呼んだり、[ ] を「配列宣言子」と呼んだとしても、(通じれば)問題はないでしょう。
補足
># 初めに言ってしまうと、それは「気にすべきではない分野」の1つです(笑) 質問した本人がいうのもなんですが、それは言えていると思います。(笑い) ご回答はなんべんも読ませていただきますが、私の頭ではよくわかりません。 やっぱり気にしないようにします。(笑) でもすみません、やっぱり以下の部分が気になります。 >で、* なんですけど、これはあくまで「ポインタ演算子」です。 >別に、演算を行うから演算子、というわけではないようです。 演算を行わないのに演算子なのかなあ、と思ってしまうのです。
- yatokesa
- ベストアンサー率40% (201/496)
>int hoge; >などと宣言しますが、このintというのは型指定子というものでしょうか。 はい >int *piyo; >という宣言のintも型指定子でしょうか。 そです。 >この場合、* はなんと呼ばれるのでしょうか。(アスタリスクという記号です、という回答は期 待していません。(^_^;)) ポインタ宣言子、でいいのでしょうか。これは「演算子」ではないん ですよね? 演算子ではないです。あまり*そのものを何て呼ぶかは聞いたことはないですね。int* でポインタ宣言、と言うのでポインタ宣言子でいいんじゃないでしょうか。 >char c[10]; >という宣言の[ ]やその中に入っている10はなんと呼ばれるのでしょうか。 要素数、でしょうかね。
補足
ご回答にはたいへん感謝いたします。 >あまり*そのものを何て呼ぶかは聞いたことはないですね。 * はなんなのか、なんて考える人はいないのかなあ(笑) でもご回答を読んでひとつ思いました。 >>int *piyo; >>という宣言のintも型指定子でしょうか。 >そです。 int* がポインタ宣言子であって、その中のintが型指定子というなら、intを除いた * の部分にも名前があるんじゃないかなあ、というふうに思いました。 ないものはないんでしょうかねえ。
お礼
ご回答有難うございます。 >ポインタ修飾子と呼んでいますが、定かではありません。 (定かではないかもしれませんが、)ポインタ修飾子って言うんですね。
補足
int *piyo; という宣言の * についてですよね。 >私の場合、演算子と呼ぶのに抵抗があるので、 やっぱりそうですよね。 演算子って言ったら、演算子の優先順位表ってあるじゃないですか、 あれを気にしなきゃいけなくなるように思えてくるんです。 あれは関係ないんですよね?