函数调用中的指针类型不兼容 - C.

时间:2014-03-03 11:05:54

标签: c pointers incompatibility

我有一个程序

#include<stdio.h>

void int_frac(double a, long *int_part,double *frac_part)
{
  *int_part = (long int)(a);
  *frac_part = a - *int_part;
}
int main()
{
  long int* ip;
  double* fp;
  double i = 1.2345467;

  int_frac(i,&ip,&fp);
  printf("%f = %ld + %f",i,*ip,*fp);
  return 0;
}

我正在使用gcc编译器。 该程序出错:

  

期望long int *但参数的类型为long int **

     

     

预期的double *但参数类型为double **

为什么会出现此错误。

2 个答案:

答案 0 :(得分:4)

编译器告诉您正在将long int**传递到期望long int*的位置。并且您正在将double**传递给double*

编译器是正确的。您将ip声明为long int*,然后传递&ip类型为long int**的{​​{1}}。您使用fp犯了同样的错误。

您所做的是声明两个指针ipfp,但不会初始化指针。根本问题是你已经声明了指针但没有分配任何变量。如果int_frac能够写入变量,则必须在某处分配这些变量。因此,您需要做的是声明两个值,并将这些值的地址传递给int_frac

您的代码应为:

int main()
{
    long int ip; // allocates a variable
    double fp; // as does this
    double i = 1.2345467;

    int_frac(i,&ip,&fp); // pass the addresses of ip and fp
    printf("%f = %ld + %f",i,ip,fp);
    return 0;
}

答案 1 :(得分:4)

您收到的错误是我认为的答案,因为您在long int**预期long int*时,ip需要将long int ip声明为int main() { long int ip; double fp; double i = 1.2345467; int_frac(i,&ip,&fp); printf("%f = %ld + %f",i,ip,fp); return 0; } ,如下所示:< / p>

{{1}}