【问题标题】:Passing array as reference to function传递数组作为函数的引用
【发布时间】:2013-12-05 17:10:28
【问题描述】:
#include <iostream>

using namespace std;

void counter(int input[], int *output);

int main()
{
    int input[15], output[10] = {0};

    for (int i = 0; i < 15; i++)
        cin >> input[i];

    for (int i = 0; i < 10; i++)
        cout << i << " appears " << counter(input[], output[]) << " times in the input." << endl;

    return 0;
}

void counter(int input[], int *output){
    for(int i = 0; i < 15; i++){
        switch(input[i]){
            case 1:
                output[0]++;
            case 2:
                output[1]++;
            case 3:
                output[2]++;
            case 4:
                output[3]++;
            case 5:
                output[4]++;
            case 6:
                output[5]++;
            case 7:
                output[6]++;
            case 8:
                output[7]++;
            case 9:
                output[8]++;
            case 10:
                output[9]++;
        }
    }
}

我正在编写一个函数,我必须传递一个数组作为对其的引用,没有错误,但是当我尝试读取主函数中的元素时,它们最初初始化时都是 0。

【问题讨论】:

  • 那是从之前发布的代码的化身。但最新的不会编译。不要即时编辑示例代码。创建你能想出的最小样本,它可以编译、运行和显示问题,然后发布。
  • 我称它为 counter (input, output) 并且我收到一个错误 - 与 'std::operator
  • 函数返回 void 你想打印吗?
  • 你也没有用正确的参数调用函数
  • 您当前的示例代码没有调用counter(input,output)。发布您正在编译的代码。否则你只是在浪费大家的时间。

标签: c++ arrays pointers reference


【解决方案1】:

您的 counter() 函数(您可以用更少的行数编写它——这是稍后的练习)返回 void。

所以:

 cout < counter(foo, bar)

不打印任一数组的内容。如果有意义的话,它将打印void。但既然这没有意义,那就是编译错误。

你可能想要:

// fill input
for (int i = 0; i < 15; i++)
    cin >> input[i];

// fill output
counter(input,output);

// print contents of output
for (int i = 0; i < 10; i++)
    cout << i << " appears " << output[i] << " times in the input." << endl;

【讨论】:

  • 这似乎可行,但是.. output[i] 的值存在问题,每个元素似乎都相同。它永远不会重置?
  • @user3002211 好吧,你也忘了break 在每个switch 里面每个case
  • @user3002211 很好发现。而且(正如我所暗示的)无论如何都不需要switchcase 1: foo[0]; case 2: foo[1] ... -- 在那里发现一个模式?也许是数学?
  • 作为进一步的提示......我的示例代码的最后一行有一个错误,也可以用“something mathsy”修复。
  • @slim u 的意思是在 foo[x] 中,x 是 -1 的情况,所以我可以以某种方式使代码更小而不是所有情况?
【解决方案2】:

您没有使用该功能:D,请在打印前使用它:)

试试这个:

int main()
{
    int input[15], output[10] = {0};

    for (int i = 0; i < 15; i++)
        cin >> input[i];


    counter(input, output);

    for (int i = 0; i < 10; i++) {
        cout << i << " appears " << output[i] << " times in the input." << endl;
    }

    return 0;
}

【讨论】:

  • counter(input[], output[]) ?
  • 我发帖时它不在那里! :)
  • 我称它为counter (input, output),但出现错误 - 'std::operator 中的 'operator
  • 因为它返回 void 并且你尝试打印 void,编译器无法让它通过,因为它没有意义
  • 抱歉我的回答很奇怪,但代码每秒都在变化
猜你喜欢
相关资源
最近更新 更多
热门标签