1

重複の可能性:
C 配列では、なぜこれが正しいのですか? [5] == 5[a]

  1. p がポインター (たとえばint * p) の場合、 とはどういう[p]意味ですか? とはどういう4[p]意味ですか? (つまり、スカラーに [p] を掛ける)

  2. xyz がプログラムで定義されたデータ型であるとします。次に、何をしますか

    void (*xyz)(void);
    

    ステートメント とはどういう意味ですか?

4

4 に答える 4

6
  1. 4[p]と同じ意味p[4]です。たとえばhttp://c-faq.com/aryptr/joke.htmlを参照してください。

  2. がすでにデータ型である場合xyz、それはエラーです。そうでない場合は、 という関数ポインタの定義ですxyz。「void_ coid_ _ _

    void を返す関数 (void) へのポインターとして xyz を宣言します。

于 2013-01-20T12:34:27.940 に答える
3
于 2013-01-20T12:38:40.830 に答える
2

とはどういう[p]意味ですか?

それ自体は何もありません。

また、どういう4[p]意味ですか?

ポインタ演算により、4[p]は を意味します*(4 + p)。これは、加算が可換であることを考えると、 と等価*(p + 4)であり、 と書くことができますp[4]。つまり、 が指す配列の 5 番目の要素ですp

xyzがデータ型の場合、void (*xyz)(void);ステートメントの意味は何ですか?

それでは構文エラーです。

がデータ型でない場合は、取得して返す関数ポインタ(つまり、「何もない」)であるxyzと宣言します。xyzvoid

于 2013-01-20T12:36:21.960 に答える
2

1) 4[p] は p[4] と同じ意味で、どちらも本質的に *(p+4) を意味し、これは配列の先頭から 5 番目の要素を意味しpます。

2)xyzは、引数をとらず何も返さない関数へのポインタの型です。

typedef void (*xyz)(void);    

void func();

xyz f= func;

以下の方法で使用する場合は、関数ポインター自体にすることもできます

//imagine the above typedef is omitted.

void (*xyz)(void) = func;

void (*xyz)(void);  // uninitialized pointer.
于 2013-01-20T12:36:37.263 に答える