- ベストアンサー
変数の後につく*は何ですか?
CとC++初心者です。 aaa(struct bbb *)という関数があります。 ある程度勉強したのですが、*bbbのように変数の前につくのはポインタだとわかりましたが、後につくのは何でしょうか? ヘルプにも出てきません。 よろしくお願いします。 また、ヘッダファイルを見て、そのソースがcかc++か区別する方法はありますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これはプロトタイプ宣言ですね。 関数の型を予め宣言しておくものです。 int func (int, char*); というような書き方で、実際の関数は int func (int a, char* b) { : } のようになります。 つまり、aaa (struct bbb*) というのは、aaaと言う関数の引数は struct bbb のポインタ型です、と予め宣言しているのです。 関数の実体ではちゃんと変数名が割り当てられていると思いますよ。
その他の回答 (2)
- knyacki__
- ベストアンサー率42% (50/117)
> では、呼び出し側はどのようにすればよいのでしょうか? 構造体定義 ---- struct bbb { : } ---- 呼び出し側 ---- struct bbb* c; aaa (c); ---- 呼び出される側 ---- int aaa (struct bbb* c) { : } ---- でコンパイルは出来ます。 [補足] 構造体の宣言が typedef struct { : }bbb; となっている場合は、 呼び出し側 ---- bbb* c; aaa (c); ---- 呼び出される側 ---- int aaa (bbb* c) { : } ---- となります。
お礼
お礼が遅れて申し訳ありません。 詳しい説明、ありがとうございました。
- madman
- ベストアンサー率24% (612/2465)
bbbは変数名ではありません。 bbbという構造体のポインタです。 ヘッダファイルを見て、CかC++か判断するには、クラス宣言をヘッダに記述していればC++と判断できます。
お礼
お礼が遅れて申し訳ありません。 どうもありがとうございました。
お礼
回答ありがとうございます。 では、呼び出し側はどのようにすればよいのでしょうか? bbb *c; aaa(c); でもエラーになるし、bbb* c; aaa(c)でもエラーになってしまいます。。。