C语言自定义函数指针

计算两数的和与差,输出结果不对。

#include<stdio.h>
int main()
{
    void sum_diff(float op1,float op2,float *psum,float *pdiff);
    float op1,op2,*psum,*pdiff,a,b;
    printf("Enter x,y:");
    scanf("%lf %lf",&op1,&op2);
    psum=&a;
    pdiff=&b;
    sum_diff(op1,op2,psum,pdiff);
    printf("The sum is %.2f\n",*psum);
    printf("The diff is %.2f",*pdiff);
    return 0;    
}
void sum_diff(float op1,float op2,float *psum,float *pdiff)
{
    static float num1,num2;
    float *x,*y; 
    num1=op1+op2;   
    psum=&num1;
    num2=op1-op2; 
    pdiff=&num2;    
}

img

float用%f,double用%lf
这只是一眼看出来的,你先改了再看还有没有错误

既然传了指针进去,直接用*psum = op1+op2就行了

还有 scanf你用的是%lf,应该改成%f

有两个地方需要改进,一是scanf读取单精度浮点数float时要用%f,二是在给指针指向的变量赋值时可以直接用*point类似格式赋值,修改后代码如下:

#include<stdio.h>
int main()
{
    void sum_diff(float op1,float op2,float *psum,float *pdiff);
    float op1,op2,*psum,*pdiff,a,b;
    printf("Enter x,y:");
    scanf("%f %f",&op1,&op2);
    psum=&a;
    pdiff=&b;
    sum_diff(op1,op2,psum,pdiff);
    printf("The sum is %.2f\n",*psum);
    printf("The diff is %.2f",*pdiff);
    return 0;    
}
void sum_diff(float op1,float op2,float *psum,float *pdiff)
{
    float num1,num2;
    num1=op1+op2;   
  //  printf("num1=%f\n",num1);
    *psum=num1;
    num2=op1-op2; 
    *pdiff=num2;   
//    printf("num2=%f\n",num2); 
}