• ベストアンサー

変数の後につく*は何ですか?

CとC++初心者です。 aaa(struct bbb *)という関数があります。 ある程度勉強したのですが、*bbbのように変数の前につくのはポインタだとわかりましたが、後につくのは何でしょうか? ヘルプにも出てきません。 よろしくお願いします。 また、ヘッダファイルを見て、そのソースがcかc++か区別する方法はありますか?

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

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

これはプロトタイプ宣言ですね。 関数の型を予め宣言しておくものです。 int func (int, char*); というような書き方で、実際の関数は int func (int a, char* b) {  : } のようになります。 つまり、aaa (struct bbb*) というのは、aaaと言う関数の引数は struct bbb のポインタ型です、と予め宣言しているのです。 関数の実体ではちゃんと変数名が割り当てられていると思いますよ。

noname#240292
質問者

お礼

回答ありがとうございます。 では、呼び出し側はどのようにすればよいのでしょうか? bbb *c; aaa(c); でもエラーになるし、bbb* c; aaa(c)でもエラーになってしまいます。。。

その他の回答 (2)

  • knyacki__
  • ベストアンサー率42% (50/117)
回答No.3

> では、呼び出し側はどのようにすればよいのでしょうか? 構造体定義 ---- struct bbb {   : } ---- 呼び出し側 ---- struct bbb* c; aaa (c); ---- 呼び出される側 ---- int aaa (struct bbb* c) {   : } ---- でコンパイルは出来ます。 [補足] 構造体の宣言が typedef struct {   : }bbb; となっている場合は、 呼び出し側 ---- bbb* c; aaa (c); ---- 呼び出される側 ---- int aaa (bbb* c) {   : } ---- となります。

noname#240292
質問者

お礼

お礼が遅れて申し訳ありません。 詳しい説明、ありがとうございました。

  • madman
  • ベストアンサー率24% (612/2465)
回答No.2

bbbは変数名ではありません。 bbbという構造体のポインタです。 ヘッダファイルを見て、CかC++か判断するには、クラス宣言をヘッダに記述していればC++と判断できます。

noname#240292
質問者

お礼

お礼が遅れて申し訳ありません。 どうもありがとうございました。

関連するQ&A