重複の可能性:
C 配列では、なぜこれが正しいのですか? [5] == 5[a]
p がポインター (たとえば
int * p
) の場合、 とはどういう[p]
意味ですか? とはどういう4[p]
意味ですか? (つまり、スカラーに [p] を掛ける)xyz がプログラムで定義されたデータ型であるとします。次に、何をしますか
void (*xyz)(void);
ステートメント とはどういう意味ですか?
重複の可能性:
C 配列では、なぜこれが正しいのですか? [5] == 5[a]
p がポインター (たとえばint * p
) の場合、 とはどういう[p]
意味ですか? とはどういう4[p]
意味ですか? (つまり、スカラーに [p] を掛ける)
xyz がプログラムで定義されたデータ型であるとします。次に、何をしますか
void (*xyz)(void);
ステートメント とはどういう意味ですか?
4[p]
と同じ意味p[4]
です。たとえばhttp://c-faq.com/aryptr/joke.htmlを参照してください。
がすでにデータ型である場合xyz
、それはエラーです。そうでない場合は、 という関数ポインタの定義ですxyz
。「void
_ coid
_ _ _
void を返す関数 (void) へのポインターとして xyz を宣言します。
とはどういう
[p]
意味ですか?
それ自体は何もありません。
また、どういう
4[p]
意味ですか?
ポインタ演算により、4[p]
は を意味します*(4 + p)
。これは、加算が可換であることを考えると、 と等価*(p + 4)
であり、 と書くことができますp[4]
。つまり、 が指す配列の 5 番目の要素ですp
。
xyz
がデータ型の場合、void (*xyz)(void);
ステートメントの意味は何ですか?
それでは構文エラーです。
がデータ型でない場合は、取得して返す関数ポインタ(つまり、「何もない」)であるxyz
と宣言します。xyz
void
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.