掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29977

配列へのポインタを返す関数
投稿者---エリエール(2007/03/25 23:41:12)


皆さん、こんばんは。質問があります。

題名の通り、配列へのポインタを返す関数を作成したいのですが
エラーになります。どなたかアドバイスをください。

int (*)[10] func(void) {...} /* エラー */

因みに、 int (*func(void))[10]; こうかく方法ならわかります。
ですが、int (*)[10] func(void) が何故駄目なのかが解りません。
どなたかよろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:配列へのポインタを返す関数 29978 YuO 2007/03/26 08:50:44
<子記事> Re:配列へのポインタを返す関数 29979 かずま 2007/03/26 17:39:44


No.29978

Re:配列へのポインタを返す関数
投稿者---YuO(2007/03/26 08:50:44)


>ですが、int (*)[10] func(void) が何故駄目なのかが解りません。

文法として許されていないから。


この投稿にコメントする

削除パスワード

No.29979

Re:配列へのポインタを返す関数
投稿者---かずま(2007/03/26 17:39:44)


> ですが、int (*)[10] func(void) が何故駄目なのかが解りません。
int a[10]; を int [10]a; と書いてはいけないのと同じ理由です。

typedef を使えば、関数宣言で、[10] を右に書かないようにできます。

typedef int (*ptr)[10];
ptr func(void) { ... }

または、

typedef int ary[10];
ary *func(void) { ... }



この投稿にコメントする

削除パスワード

No.29980

Re:配列へのポインタを返す関数
投稿者---エリエール(2007/03/26 21:49:36)


YuO様、かずま様、返信ありがとうございます。

int (*)[10] は型として成立するが、添字演算子の後に
識別子が存在するのが駄目ということでしょうか?

あるいは、標準で用意されている型(int, double等)以外を、
変数の定義(型 + 識別子)に使うことはできないということでしょうか?


この投稿にコメントする

削除パスワード

No.29981

Re:配列へのポインタを返す関数
投稿者---かずま(2007/03/26 22:26:08)


> int (*)[10] は型として成立するが、添字演算子の後に
> 識別子が存在するのが駄目ということでしょうか?

int (*)[10] は、型名として認識されますが、
構文上、型名を書くことが許されるのは、
・sizeof (型名)、
・キャストの (型名)、
・関数の仮引数宣言
だけのはずです。

識別子の宣言の構文では、
・ポインタの * は、宣言子の前、
・配列の [ ] は、宣言子の後ろ、
・関数の ( ) は、宣言子の後ろ
と決まっています。

ここでいう宣言子とは、
・識別子、
・*宣言子
・宣言子[ ]
・宣言子( )
・(宣言子)
のことです。厳密に言うと、右結合であることを示すために、
構文上は、直接宣言子というものが導入されています。

なお、宣言の構文の [ ] は演算子ではありません。


> あるいは、標準で用意されている型(int, double等)以外を、
> 変数の定義(型 + 識別子)に使うことはできないということでしょうか?

変数の定義、もっと正確に言うと、
オブジェクトの宣言、または関数の宣言ですが、これは、
「型 + 識別子」ではなく、「宣言指定子 + 宣言子」です。

宣言指定子は、記憶域指定子 + 型修飾子 + 型指定子 (それぞれ 0個以上、順不同)

記憶域指定子は、extern、static、typedef など。
型修飾子は、const、volatile。
型指定子は、int、double、unsigned char、struct タグ名、typedef名など。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧