2010-12-08 8 views

答えて

0
  1. 15文字の配列へのポインタ。
  2. 関数ポインタ。 intポインタをとり、charを返します。
  3. と同じ4
  4. 関数プロトタイプ。 charをとり、intを返します。ポインタポイントを入力するかを調べるための単純なトリックがちょうど*を削除し、残っているものを確認することです
+0

3は関数プロトタイプよりも関数ポインタ(実際の 'typedef'キーワードを残して)のtypedefになりそうです。 4は関数プロトタイプですが、戻り値の型はint型ではなくint型です。 –

+3

3は4と同じではありません。3は関数ポインタ、4は関数プロトタイプです。余分なかっこでは大きな違いがあります。 – thkala

+1

4はintではなくintポインタを返します –

1

  1. char p[15];
  2. char p(int *a);
  3. int pt(char*);
  4. int pt(char*);

あなたが得るのは、あなたのポインタが指すタイプの変数宣言です。第4のケースでは、

int *pt(char*); 

は有効なポインタ宣言ではありません。

EDIT:

理由は括弧なしで、関数呼び出し「演算子」はポインタ参照演算子よりも優先されるということです。上記の場合、平易な英語で宣言がある:

*ptがその機能である:我々は、

int (*pt)(char *); 

に変換しながらint *

を返すpt(char *)機能を、

有しますchar *を返し、intを返します。

これは、基本的にはptがそのタイプへのポインタであることを意味します。

2

基本ルール:可能であれば、識別子から開始して、必要なときに読んでください。

  1. 識別子*で始まります。それを言って、それに続いて「is a」。あなたの "左足"を1文字左に置きます。
  2. あなたが最後を叩くまで、または)を右に読んでください。あなたの「右足」を1文字右に置いてください。)は、あなたが当てはまるものならそれです。
    • 右に読んだときに[42]が表示されている場合は、「42の配列」と言ってください。
    • の右にと表示されている場合は、「関数取得」と言い換えて、各パラメータの型を指定します(パラメータ名自体は省略します)。
  3. ここで、左足を踏んで、最初にヒットするか、(になるまで左に読んでください。それがあなたが命中した場合は、左足を(の左に1文字置きます。
    • 左に読んだときに*または&が表示される場合は、「ポインタ」または「参照先」と言ってください。
    • 他に表示されるもの(例:constintMyFoo)は、それだけです。
  4. 開始したら、完了です。それ以外の場合は、右足に戻って2に移動します。

*識別子がない場合は、どこに行かなければならないのか想像してください。私は知っていますが、法的な配置は1つだけです。これらの規則に従って

  1. pは15文字
  2. pは
  3. PTポインタを取る関数へのポインタですintへのポインタをとり、戻りチャー機能へのポインタであるの配列へのポインタでありますchar型へとintへのポインタをchar型へのポインタを取って、返す関数をint型
  4. PTをされて戻って
+0

完全なルールセットを持つのは良いことですが、私はこのすべてのホッピングの後に私の足が傷つけることを認めなければなりません:-) – thkala

+0

デコードする長い宣言があれば、タイトフィットのズボンを着ない方がいいです:) –

関連する問題