2017-06-10 76 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

fp是一個指針

(*fp) 

到功能

(*fp)(

接受型char

(*fp)(char) 

1個參數,並返回類型的值int

int (*fp)(char) 

在大部分冗餘轉換之後,指針初始化的地址爲puts

int (*fp)(char *)=(int(*)(char *))&puts 
int (*fp)(char *)=(int(*)(char *))puts // & redundant 
int (*fp)(const char *)=puts 

對象i未初始化。它具有類型int

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

首先出現的是一個變量聲明:

int (*fp)(char *) 

fp是指向功能,它採取了char *參數和返回int

然後fp被初始化爲一個值:

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

的值是puts函數的地址,轉換爲相同的類型fp

最後,還有另外一個變量聲明:

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

有兩個部分本聲明:

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

第一爲:int (*fp)(char *)=(int(*)(char *))&puts; 解釋:這是函數指針聲明並在單個語句中初始化。其中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;