机智如我么么哒 发表于 2019-10-3 15:39:54

为什么类型会不一样

#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);
}

bin554385863 发表于 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);
你觉得合适么

机智如我么么哒 发表于 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的值;");//上下标的 ...

我改了,但是结果还是 assignment from incompatible pointer type

bin554385863 发表于 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类型的指针,你见过给一个指针赋普通值的?

看不懂英文可以在线翻译啊

666666q 发表于 2019-10-4 14:24:50

用函数指针指向函数不就行了

机智如我么么哒 发表于 2019-10-4 14:36:37

bin554385863 发表于 2019-10-4 13:13
double *p;
      printf("请输入a1,b1的值;");//上下标的值
      scanf("%d%d",&a1,&b1) ...

我想用指向函数的指针,请问要怎样使用指向函数的指针?

机智如我么么哒 发表于 2019-10-4 14:37:10

666666q 发表于 2019-10-4 14:24
用函数指针指向函数不就行了

可以说一下怎么使用吗?

人造人 发表于 2019-10-4 14:59:52

机智如我么么哒 发表于 2019-10-4 14:37
可以说一下怎么使用吗?

把你现在的代码贴出来,把你现在的需求贴出来

666666q 发表于 2019-10-5 15:19:02

机智如我么么哒 发表于 2019-10-4 14:37
可以说一下怎么使用吗?

定义一个函数指针 用函数指针指向函数

superbe 发表于 2019-10-6 22:38:31

本帖最后由 superbe 于 2019-10-10 21:26 编辑

#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)(double x,double y);    //声明函数指针,只要把函数原型中的函数名替换为(*p)就可以了
      printf("请输入a1,b1的值:");
      scanf("%lf%lf",&a1,&b1);            //a1,b1是double,使用%lf,不能用%d
      printf("请输入a2,b2的值:");
      scanf("%lf%lf",&a2,&b2);
      printf("请输入a3,b3的值:");
      scanf("%lf%lf",&a3,&b3);
      p=fac1;                            //给函数指针赋值
        printf("sinx的积分值为%.4lf\n",(*p)(a1,b1));//调用函数指针,把(*p)或p当成函数名像普通函数一样调用就可以了
      p=fac2;
        printf("cosx的积分值为%.4lf\n",(*p)(a2,b2));//p(a2,b2)也可以
      p=fac3;
        printf("e^x的积分值为%.4lf\n",(*p)(a3,b3));
      return 0;
}

机智如我么么哒 发表于 2019-10-9 00:58:06

superbe 发表于 2019-10-6 22:38


谢谢,这几天没上论坛,确认晚了
页: [1]
查看完整版本: 为什么类型会不一样