私はctfの問題を抱えていて、私は理解できない行があります。ポインタ文を理解できません
int (*fp)(char *)=(int(*)(char *))&puts, i;
これは何を意味するのですか?
私はctfの問題を抱えていて、私は理解できない行があります。ポインタ文を理解できません
int (*fp)(char *)=(int(*)(char *))&puts, i;
これは何を意味するのですか?
fp
型char
(*fp)(char)
の1つの引数を受け取り、タイプint
(*fp)(
へのポインタ
(*fp)
ある
int (*fp)(char)
ポインタは、ほとんど冗長な変換後にputs
のアドレスで初期化されます。
int (*fp)(char *)=(int(*)(char *))&puts
int (*fp)(char *)=(int(*)(char *))puts // & redundant
int (*fp)(const char *)=puts
オブジェクトi
は初期化されていません。
int (*fp)(char *)
fp
がchar *
パラメータを取り、int
を返す関数へのポインタ、である:それはまずint
int (*fp)(char *)=(int(*)(char *))&puts, i;
変数宣言が型を持ちます。そしてfp
の値に初期化される
:値がputs
関数のアドレスである
(int(*)(char *))&puts
は、fp
と同じ型にキャスト。
そして最後に、別の変数宣言がある:
int (*fp)(char *)=(int(*)(char *))&puts, i;
最初は次のとおりです:(*fp)(char *)=(int(*)(char *))&puts;
説明をint型:
int /* ... */, i;
はこの宣言には2つの部分がありますが、これは、関数ポインタの宣言でありますシングルステートメントでの初期化。ここで、fp
は、関数puts
へのポインタです。 fp
とputs
の値を印刷する場合、同じ値、つまりputs
のアドレスが出力されます。
#include<stdio.h>
int main()
{
int (*fp)(char *)=(int(*)(char *))&puts, i;
printf("puts %p\n",puts);
printf("fp %p\n",fp);
}
と第である:int i;
使用リンク:[FP関数へのポインタ(charへのポインタ)として返すINT(https://cdecl.org/?q=int++%28* fp%29%28char + *%29) – chux