|  | 
 
| 
本帖最后由 rain_arch 于 2021-7-25 23:24 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 使用函数指针定义后在赋值时出现错误,但在定义时赋值不会出现错误
 
 出错的代码:
 
 // 函数
 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;
}
 | 
 |