鱼C论坛

 找回密码
 立即注册
查看: 1021|回复: 5

[已解决]关于函数指针定义问题

[复制链接]
发表于 2021-7-25 23:22:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
最佳答案
2021-7-25 23:36:44
// 函数
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-25 23:36:44 | 显示全部楼层    本楼为最佳答案   
// 函数
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-25 23:41:04 | 显示全部楼层

为什在主函数之外就不可以呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-25 23:50:14 | 显示全部楼层
rain_arch 发表于 2021-7-25 23:41
为什在主函数之外就不可以呢

函数外面的语句怎么执行?什么时候执行?
初始化的时候?什么初始化?局部变量初始化,全局变量初始化,你听过全局代码初始化?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-26 00:07:27 | 显示全部楼层
全局代码初始化
这么说确实不合适,因为没有这样的概念,我真编不出来
函数外面不能写语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-26 11:14:28 | 显示全部楼层
你只能在外面定义变量
语句都有代码块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 20:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表