初始化后甚至出错?

时间:2015-09-01 15:23:22

标签: c++ initialization

#include <iostream>
using namespace std;
float* findAverage(int arr[][1], int rows, float averages[1]);
int main (){
int myArr[1][1];
for (int i = 0; i < 2; i++){
    for (int j = 0; j < 2; j++){
    cin >> myArr[j][i];
    }
}
float* theAverages = {0};
theAverages = findAverage(myArr, 2, theAverages);
return 0;
}

float* findAverage(int arr[][1], int rows, float averages[1]){
    for (int x = 0; x < rows; x++){
        for (int i = 0; i < 2; i++){
            averages[x]+=arr[i][x];
            cout << averages[0] << endl;
        }
    }
    for (int j = 0; j < 2; j++){
    cout << float(averages[j]/2) << endl;
    }
    return 0;
}

^以上是我的代码,但是即使在用0初始化之后它也会显示一个奇怪的浮点数。我哪里出错?

1 个答案:

答案 0 :(得分:1)

有几个问题正在发生。

int myArr[1][1];

是1行1列2d数组,但您将其用作2行2列2d数组。您需要将其更改为int myArr[2][2];。请记住,数组索引从0开始,但数组大小从1开始。

第二个问题是你永远不会分配平均值。你应该改变

float* theAverages = {0};

float theAverages[] = {0f, 0f};

你也应该

float* findAverage(int arr[][1], int rows, float averages[1]);

void函数,因为您已将输出放在averages中。所以它应该成为

void findAverage(int arr[][2], int rows, float averages[2]);

您还需要在函数末尾删除return 0;。然后你可以改变

theAverages = findAverage(myArr, 2, theAverages);

findAverage(myArr, 2, theAverages);