关于函数指针定义问题
本帖最后由 rain_arch 于 2021-7-25 23:24 编辑使用函数指针定义后在赋值时出现错误,但在定义时赋值不会出现错误
出错的代码:
// 函数
int ponit_func(int *num1,int *num2)
{
if(*num1>*num2)
return *num1;
else
return *num2;
}
// 指针
int (*point_fn)(int* num1,int* num2) /*= &ponit_func*/;
point_fn = &ponit_func;
错误输出:
8.c:28:1: 警告:数据定义时没有类型或存储类
28 | point_fn = &ponit_func;
| ^~~~~~~~
8.c:28:1: 警告:在‘point_fn’的声明中,类型默认为‘int’ [-Wimplicit-int]
8.c:28:1: 错误:conflicting types for ‘point_fn’; have ‘int’
8.c:26:7: 附注:previous declaration of ‘point_fn’ with type ‘int (*)(int *, int *)’
26 | int (*point_fn)(int* num1,int* num2) /*= &ponit_func*/;
| ^~~~~~~~
8.c:28:12: 警告:initialization of ‘int’ from ‘int (*)(int *, int *)’ makes integer from pointer without a cast [-Wint-conversion]
28 | point_fn = &ponit_func;
| ^
8.c:28:12: 错误:初始值设定中的元素在载入时无法被计算出
8.c: 在函数‘main’中:
8.c:41:52: 错误:一元 ‘*’参数类型无效(有‘int’)
41 | printf("vlaue of ponit_func(int*,int*) is %d",(*point_fn)(&a,&b));
|
但是使用初始化就赋值是正确的
可以运行的代码:
int ponit_func(int *num1,int *num2)
{
if(*num1>*num2)
return *num1;
else
return *num2;
}
int (*point_fn)(int* num1,int* num2) = &ponit_func; // 函数
int ponit_func(int *num1,int *num2)
{
if(*num1>*num2)
return *num1;
else
return *num2;
}
// 指针
int (*point_fn)(int* num1,int* num2) /*= &ponit_func*/;
//point_fn = &ponit_func;
int main(void) {
point_fn = &ponit_func;
}
人造人 发表于 2021-7-25 23:36
为什在主函数之外就不可以呢
rain_arch 发表于 2021-7-25 23:41
为什在主函数之外就不可以呢
函数外面的语句怎么执行?什么时候执行?
初始化的时候?什么初始化?局部变量初始化,全局变量初始化,你听过全局代码初始化?
全局代码初始化
这么说确实不合适,因为没有这样的概念,我真编不出来
函数外面不能写语句
你只能在外面定义变量
语句都有代码块
页:
[1]