用整数填充数组

时间:2013-10-26 02:02:32

标签: c++ arrays

我正在尝试使用数字1111到8888填充数组,数字中的每个整数在c ++中介于1和8之间。但是,当我运行它时,它只输出大的负数表示错误。老实说,我已经知道错误是什么,所以如果你能帮助我,我将不胜感激。谢谢!

    int fillArray()
    {
    int arrayPosition;  
    int guesses[4096];

arrayPosition = 0;
for (int i = 1; i <= 8; i++)
      for (int j = 1; j <= 8; j++)
        for (int k = 1; k <= 8; k++)
          for (int m = 1; m <= 8; m++)
          {
           guesses[arrayPosition] = ((i * 1000) + (j * 100) + (k *10) + m);
           cout << guesses[arrayPosition];
                   arrayPosition++;   
           }

return guesses[4096];
    }

3 个答案:

答案 0 :(得分:4)

您的退货类型有误。 int fillArray(),但您正在尝试返回在堆栈中声明的int[4096] ...您实际使用return guesses[4096];执行的操作是返回第一个内存位置 你的数组在内存中,这可能只是垃圾,因此你的问题是大的负数。

您可以通过在堆中分配数组并返回指向该数组开头的指针来修复它:

int * fillArray()
{
  int arrayPosition;  
  int * guesses = new int[4096];

  // other stuff stays the same...

  return guesses;
}

但是,由于您的函数名为 fillArray ,因此传入数组并填充它而不是在函数中创建数组会更有意义。 (如果您想这样做,可以将其称为类似make_1_to_8_array的内容,以便更清楚地表明您正在构建需要稍后删除的内容。)首先提供int*参数将允许您传入要填充的数组的基址:

void fillArray(int * guesses)
{
  int arrayPosition;  

  // other stuff stays the same...

}

或者,如果您要验证您使用的是具有确切大小的数组:

void fillArray(int (&guesses)[4096])
{
  int arrayPosition;  

  // other stuff stays the same...

}

请注意,该函数现在返回void,因为您刚刚更新了传入的数组,并且您不需要返回任何新内容。

答案 1 :(得分:3)

您的for - 循环看起来是正确的,但您的阵列处理已关闭,正如其他答案所突出显示的那样。

在C ++中更常用的是使用std::vector并在中通过引用将其作为参数传递。这样可以节省您处理内存分配和释放的麻烦。这是一个例子,包括for - 循环中的输出:

#include <iostream>
#include <vector>

int fillArray(std::vector<int>& guesses)
{
    for (int i = 1; i <= 8; i++)
        for (int j = 1; j <= 8; j++)
            for (int k = 1; k <= 8; k++)
                for (int m = 1; m <= 8; m++)
                {
                    guesses.push_back((i * 1000) + (j * 100) + (k * 10) + m);
                    std::cout << guesses.back() << std::endl;
                }

    return guesses.back();
}

int main()
{
    std::vector<int> guesses;
    std::cout << fillArray(guesses) << std::endl;
}

答案 2 :(得分:0)

您正在本地创建阵列然后尝试返回它。如果您在返回之前尝试打印(调试)数组的结果,您将看到它没问题。但是,一旦返回,数组就不会有效。尝试将数组传入您的函数。