2017-06-10 3 views
2

私はctfの問題を抱えていて、私は理解できない行があります。ポインタ文を理解できません

int (*fp)(char *)=(int(*)(char *))&puts, i; 

これは何を意味するのですか?

+0

使用リンク:[FP関数へのポインタ(charへのポインタ)として返すINT(https://cdecl.org/?q=int++%28* fp%29%28char + *%29) – chux

答えて

3

fpchar

(*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 *) 

fpchar *パラメータを取り、intを返す関数へのポインタ、である:それはまずint

int (*fp)(char *)=(int(*)(char *))&puts, i; 
0

変数宣言が型を持ちます。そしてfpの値に初期化される

:値がputs関数のアドレスである

(int(*)(char *))&puts 

は、fpと同じ型にキャスト。

そして最後に、別の変数宣言がある:

int (*fp)(char *)=(int(*)(char *))&puts, i; 

最初は次のとおりです:(*fp)(char *)=(int(*)(char *))&puts; 説明をint型:

int /* ... */, i; 
0

はこの宣言には2つの部分がありますが、これは、関数ポインタの宣言でありますシングルステートメントでの初期化。ここで、fpは、関数putsへのポインタです。 fpputsの値を印刷する場合、同じ値、つまり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;

関連する問題