2013-02-07 82 views
3

我正在处理一个函数,该函数需要一些值并查找值的最小值,最大值和平均值。我通过引用传递的一切功能,我得到了一些错误,当我尝试做基本的操作,如+/即误差无效操作数到二进制表达式,C

无效操作数的二进制表示(“双*”和“双* “)

void MinMaxAvg(double *pA, double *min, double *max, double *avg, int lines, double *total) 
{ 
    for (int i=0; i<lines; i++) 
    { 
     if (i==0) 
     { 
      min = &pA[0]; 
      max = &pA[0]; 
     } 
     else 
     { 
      if (&pA[i] < min) 
      { 
       min = &pA[i]; 
      } 

      if (&pA[i] > max) 
      { 
       max = &pA[i]; 
      } 
     } 

     total += &pA[i];  //<-- Errors on this line 

    } 

    avg = (total/lines);   // <-- Errors on this line. 

} 

回答

4

看起来好像你正在遇到一些困惑的类型。在你的例子中,你将指针设置为一个新值,而不是所述指针的值。

首先必须是:

*total += pA[i]; 

虽然第二应该是:

*avg = (*total/lines); 

事实上,你可能想使用浮在第二的错误点师(一些编译器在意想不到的地方使用整数除法是臭名昭着的):

*avg = (*total/(double)lines); 

你会但是,如果你这样做,仍然会出现错误。例如&pA[i] > ...将导致指针比较,即指针的地址将被比较。最有可能不是你想要的。

+0

谢谢!这使得无限的感觉!彻底解决了我的问题。 – aprohl5

+0

哪个编译器会在那里产生一个整数除法? –

+0

很高兴它帮助你;) - @larsmans我已经看到至少有一些Borland的编译器套件版本在这种情况下产生整数划分。但奇怪的是,它并不总是这样做。似乎是某些版本的错误,但我猜测它不会是唯一的编译器。加入演员阵容没有伤害,所以安全性比对不起,对吧? – Magnus

2

你试图添加一个地址的指针,这不是一个有效的操作。

你大概的意思是:

*total += pA[i]; 

您使用的&pA似乎很迷茫,一样的指针minmax的重新分配。

如果您有一个指向值的指针(如double *min),那么*min是您访问(读取或写入)所指向的值的方式。

1

与C++不同,C语言中没有“引用传递”。如果您想使用变量值,则应该取消引用代码中的每个指针。现在你使用变量地址。

+0

不完全确定你的意思,因为我的代码似乎工作得很好。 – aprohl5

相关问题