'无法转换'浮动'到'浮动*'争论' 1'

时间:2015-02-02 16:52:18

标签: c++ arrays function pointers

我是一名ICT学生,正在学习C ++,我发现它非常有趣。然而,在进行实验时,我想出了一些我无法自我修复或在网上找到的东西。 这是代码:

    #include <iostream>

using namespace std;


float average(float array[10], float &average){
      int i = 0;

      for( i = 0; i != 10; i++ ){
                cout << "Vett ("<<i<<") = ";
                cin >> array[i];
                while(cin.fail())
                {
                              cin.clear();
                              cin.ignore();
                              system("Color 5C");
                              cout << "\nPlease insert a number: ";
                              cin >> array[i];
                }
                average = average + array[i];
                }
                average = average / 10;
                return array[10];
                return average;
                }

main(void){
           float vett[10], media;
           int i;
           char loop;

           vett[10] = 0;
           media = 0;


           do{
           system("cls");
           system("Color 00");
           cout<<"****************************************"<<endl;
           cout<<"***     INSER THE DATA TO COMPUTE    ***"<<endl;
           cout<<"****************************************\n"<<endl;

         /*  for( i = 0; i != 10; i++ ){
                cout << "Vett ("<<i<<") = ";
                cin >> vett[i];
                while(cin.fail())
                {
                              cin.clear();
                              cin.ignore();
                              system("Color 5C");
                              cout << "\nPlease insert a number: ";
                              cin >> vett[i];
                }
                media = media + vett[i];
                }

                media = media / 10;
                */
                average(vett[10],media);
                for( i = 0; i != 10; i++ ){
                     cout << vett[i]<<"  ";
                     }

                if(media == 0){
                         cout << "\nATTENTION the average equals to = "<<media<<endl;
                         }
                else{
                     cout << "\nThe average is"<<media<<endl;
                     }
                     printf("\n");
                     cout << "\nDo You want to continue? Y/N";
                     cin >> loop;
                     }
                     while(loop == 'Y' || loop == 'y');
                     system("pause");
                     }

出于某种原因,我无法设置平均值。将数组作为指针(&amp;数组)运行,可能是因为数组已经是指针。尽管如此,删除它会给我以下错误:

"Cannot convert 'float' to 'float*' for argument '1' to 'float average(float*,float&)'

如果我以这种方式调用函数

average(&vett[10],media);

它可以工作,但在数组中返回奇怪的值。 正如你所看到的,我评论了我放在函数中的相同的东西,它完美地工作,除非..我把它放在一个函数中。我假设我已经对函数调用做错了,有人可以帮我理解吗?

5 个答案:

答案 0 :(得分:4)

首先,请注意main(void){不是main的有效签名 它应该是:

int main(void){

然后:

float vett[10];
vett[10] = 0;

这是无效的。数组索引从0开始,因此索引10超出范围,因为它需要一个大小为11的数组。

此外,由于您的average函数将float数组作为第一个参数,您需要以这种方式传递它:

average(vett,media);

使用:

average(&vett[10],media);

将传递指向数组后面的数据的指针,显然你会得到垃圾值。

答案 1 :(得分:2)

  • 不要在C ++中使用func(void),它已被弃用了。请改用func()
  • 如果您有float vett[10];,则vett[10]无效。您只能使用vett[0 .. 9]
  • float average(float array[10], float &average)实际上是指
    float average(float *array, float &average)
    (第二种形式是宣布指针参数的更常用方法。)
    如果你想打电话它以vett为参数,只需使用average(vett, media);

    数组的名称,当用作指针时,会自动转换为指向数组第一个元素的指针< / em>的。所以这里是average(vett, media);
    vett表示&vett[0]

答案 2 :(得分:1)

方括号中的数字有两个含义:

  • float vett[10];之类的声明中,它是数组的大小
  • 当不在声明中时,如average(&vett[10],media);,则表示数组的第11个元素。

average(&vett[10],media);将第11个元素的地址传递给函数。该函数将其解释为数组的开头,这是错误的,并且在访问数组外部的元素时会导致未定义的行为。

因为您想要传递整个数组,所以应该使用

average(vett,media);

答案 3 :(得分:0)

我会在帮助中添加更多内容......

您的平均方法最后有两个return语句。永远不会达到最后一个(你想要的那个),因为该方法将在第一个返回...

答案 4 :(得分:0)

在函数中代替此

float average(float array[10], float &average){ 

你必须把这个:

float average(float *array, float &average){