例:
声明了函数指针 void(*f)(void);
能不能将其转换成 void(*f)(int),int(*f)(void),int(*f)(int)
这边尝试:
typedef (void)(*f1)(int) //伪函数
void a(void) //伪函数
void b(int) //伪函数
(f1)f //进行强制转换(类比 变量)
f=b;
f(1);
出现编译报错,提示参数太多。不明白哪个环节出了问题。
首先感谢@TianSong641针对提问的建议。
这里引用你回答里的例子
#include <stdio.h>
typedef void(*f1)(int); // typedef 重命名,f1 类型 => void(*)(int)
void a(void); // 函数声明
void b(int); // 函数声明
void(*f_a)(int);
int(*f_b)(void);
int(*f_c)(int);
void b(int val) // 函数定义
{
printf("void b(int val), val = %d\n", val);
}
int main()
{
(f1)f_a; // 编译通过
(f1)f_b; // 编译通过
(f1)f_b; // 编译通过
f1 f; // 定义函数指针,f 未初始化的野指针
f = b; // 让 f 指向 函数 b
f(1);
return 0;
}
(f1)f_a; // 编译通过
(f1)f_b; // 编译通过
(f1)f_b; // 编译通过
这边只是对指针进行强转
但是f_b还是不能指向b,然后f_b(1)进行调用;
f_b=b;
f_b(1);
其实我这边想了解的是
void()(int)、void()(void)、int(*)(void)这三种函数指针能不能强制进行类型转换?如果可以要怎么写
void(f1)(int)==>void(f1)(void);
void(*f1)(int); //声明f1
void(*)(void)f1; //f1类型强转?
当然上面的强转语法是错的。。因为我不晓得能不能这样做。。
运行输出:[编译无错误无警告]
;
,而不是笼统的抛出问题,这样人们才更乐于解答同时也是基本的尊重