|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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));
|
但是使用初始化就赋值是正确的
[i]可以运行的代码:[/i]
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;
- }
复制代码
|
|