无法理解指针语句
Unable to understand a pointer statement
我在做ctf题,有一行看不懂
int (*fp)(char *)=(int(*)(char *))&puts, i;
谁能解释一下这是什么意思?
fp
是指针
(*fp)
函数
(*fp)(
接受 1 个 char
类型的参数
(*fp)(char)
和 returns 类型的值 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;
首先是变量声明:
int (*fp)(char *)
fp
是一个指向函数的指针,它接受一个 char *
参数并返回 int
。
然后fp
被初始化为一个值:
(int(*)(char *))&puts
该值为 puts
函数的地址,转换为与 fp
.
相同的类型
最后,还有一个变量声明:
int /* ... */, i;
此声明分为两部分:
int (*fp)(char *)=(int(*)(char *))&puts, i;
第一个是:int (*fp)(char *)=(int(*)(char *))&puts;
说明:这是单语句中的函数指针声明和初始化。其中 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;
我在做ctf题,有一行看不懂
int (*fp)(char *)=(int(*)(char *))&puts, i;
谁能解释一下这是什么意思?
fp
是指针
(*fp)
函数
(*fp)(
接受 1 个 char
(*fp)(char)
和 returns 类型的值 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;
首先是变量声明:
int (*fp)(char *)
fp
是一个指向函数的指针,它接受一个 char *
参数并返回 int
。
然后fp
被初始化为一个值:
(int(*)(char *))&puts
该值为 puts
函数的地址,转换为与 fp
.
最后,还有一个变量声明:
int /* ... */, i;
此声明分为两部分:
int (*fp)(char *)=(int(*)(char *))&puts, i;
第一个是:int (*fp)(char *)=(int(*)(char *))&puts;
说明:这是单语句中的函数指针声明和初始化。其中 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;