鱼C论坛

 找回密码
 立即注册
查看: 1809|回复: 10

[已解决]为什么类型会不一样

[复制链接]
发表于 2019-10-3 15:39:54 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
#include<math.h>
int main()
{
        double fac1(double x,double y);
        double fac2(double x,double y);
        double fac3(double x,double y);
        double a1,a2,a3,b1,b2,b3,i,j,k;
        double *p;
        printf("请输入a1,b1的值;");//上下标的值
        scanf("%d%d",&a1,&b1);
        printf("请输入a2,b2的值;");
        scanf("%d%d",&a2,&b2);
        printf("请输入a3,b3的值;");
        scanf("%d%d",&a3,&b3);
        p=fac1;                                                                            //关键在这,为什么我指针用了double型还是类型不匹配
        fac1(a1,b1);
        printf("sinx的积分值为%.4lf\n",*p);
        p=fac2;                                                                           //同上
        fac2(a2,b2);
        printf("cosx的积分值为%.4lf\n",*p);
        p=fac3;                                                                          //同上
        fac3(a3,b3);
        printf("e^x的积分值为%.4lf\n",*p);
        return 0;
}
double fac1(double x,double y)
{
        double t;
        t=cos(y)-cos(x);
        return (t);
}
double fac2(double x,double y)
{
        double t;
        t=sin(x)-cos(y);
        return (t);
}
double fac3(double x,double y)
{
        double t;
        t=exp(y)-exp(x);
        return (t);
}
最佳答案
2019-10-6 22:38:31
本帖最后由 superbe 于 2019-10-10 21:26 编辑
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.         double fac1(double x,double y);
  6.         double fac2(double x,double y);
  7.         double fac3(double x,double y);
  8.         double a1,a2,a3,b1,b2,b3,i,j,k;
  9.         double (*p)(double x,double y);    //声明函数指针,只要把函数原型中的函数名替换为(*p)就可以了
  10.         printf("请输入a1,b1的值:");
  11.         scanf("%lf%lf",&a1,&b1);            //a1,b1是double,使用%lf,不能用%d
  12.         printf("请输入a2,b2的值:");
  13.         scanf("%lf%lf",&a2,&b2);
  14.         printf("请输入a3,b3的值:");
  15.         scanf("%lf%lf",&a3,&b3);
  16.         p=fac1;                            //给函数指针赋值
  17.         printf("sinx的积分值为%.4lf\n",(*p)(a1,b1));  //调用函数指针,把(*p)或p当成函数名像普通函数一样调用就可以了
  18.         p=fac2;
  19.         printf("cosx的积分值为%.4lf\n",(*p)(a2,b2));  //p(a2,b2)也可以
  20.         p=fac3;
  21.         printf("e^x的积分值为%.4lf\n",(*p)(a3,b3));
  22.         return 0;
  23. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-4 01:21:50 | 显示全部楼层
double a1,a2,a3,b1,b2,b3,i,j,k;
        double *p;
        printf("请输入a1,b1的值;");//上下标的值
        scanf("%d%d",&a1,&b1);
        printf("请输入a2,b2的值;");
        scanf("%d%d",&a2,&b2);
        printf("请输入a3,b3的值;");
        scanf("%d%d",&a3,&b3);
你觉得合适么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-4 09:39:23 | 显示全部楼层
bin554385863 发表于 2019-10-4 01:21
double a1,a2,a3,b1,b2,b3,i,j,k;
        double *p;
        printf("请输入a1,b1的值;");//上下标的 ...

我改了,但是结果还是[Warning] assignment from incompatible pointer type
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-4 13:13:24 | 显示全部楼层
本帖最后由 bin554385863 于 2019-10-4 13:15 编辑

        double *p;
        printf("请输入a1,b1的值;");//上下标的值
        scanf("%d%d",&a1,&b1);
        printf("请输入a2,b2的值;");
        scanf("%d%d",&a2,&b2);
        printf("请输入a3,b3的值;");
        scanf("%d%d",&a3,&b3);
       p=fac1;                                                                            //关键在这,为什么我指针用了double型还是类型不匹配
        fac1(a1,b1);
        printf("sinx的积分值为%.4lf\n",*p);
       p=fac2;                                                                           //同上
        fac2(a2,b2);
        printf("cosx的积分值为%.4lf\n",*p);
        p=fac3;                                                                          //同上
        fac3(a3,b3);

p是一个double类型的指针,你见过给一个指针赋普通值的?

看不懂英文可以在线翻译啊
360截图20191004131140103.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-4 14:24:50 | 显示全部楼层
用函数指针指向函数不就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-4 14:36:37 | 显示全部楼层
bin554385863 发表于 2019-10-4 13:13
double *p;
        printf("请输入a1,b1的值;");//上下标的值
        scanf("%d%d",&a1,&b1) ...

我想用指向函数的指针,请问要怎样使用指向函数的指针?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-4 14:37:10 | 显示全部楼层
666666q 发表于 2019-10-4 14:24
用函数指针指向函数不就行了

可以说一下怎么使用吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-4 14:59:52 | 显示全部楼层
机智如我么么哒 发表于 2019-10-4 14:37
可以说一下怎么使用吗?

把你现在的代码贴出来,把你现在的需求贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-5 15:19:02 | 显示全部楼层
机智如我么么哒 发表于 2019-10-4 14:37
可以说一下怎么使用吗?

定义一个函数指针 用函数指针指向函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-6 22:38:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2019-10-10 21:26 编辑
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.         double fac1(double x,double y);
  6.         double fac2(double x,double y);
  7.         double fac3(double x,double y);
  8.         double a1,a2,a3,b1,b2,b3,i,j,k;
  9.         double (*p)(double x,double y);    //声明函数指针,只要把函数原型中的函数名替换为(*p)就可以了
  10.         printf("请输入a1,b1的值:");
  11.         scanf("%lf%lf",&a1,&b1);            //a1,b1是double,使用%lf,不能用%d
  12.         printf("请输入a2,b2的值:");
  13.         scanf("%lf%lf",&a2,&b2);
  14.         printf("请输入a3,b3的值:");
  15.         scanf("%lf%lf",&a3,&b3);
  16.         p=fac1;                            //给函数指针赋值
  17.         printf("sinx的积分值为%.4lf\n",(*p)(a1,b1));  //调用函数指针,把(*p)或p当成函数名像普通函数一样调用就可以了
  18.         p=fac2;
  19.         printf("cosx的积分值为%.4lf\n",(*p)(a2,b2));  //p(a2,b2)也可以
  20.         p=fac3;
  21.         printf("e^x的积分值为%.4lf\n",(*p)(a3,b3));
  22.         return 0;
  23. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-9 00:58:06 | 显示全部楼层

谢谢,这几天没上论坛,确认晚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 21:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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