修改函数中的动态2D数组

时间:2013-07-19 01:08:01

标签: c++ dynamic-arrays

我有一个函数接受一个动态多维数组(初始化为0)作为参数,我试图在我的函数中修改数组中的某些值。

接受数组作为参数的函数应该模拟两个骰子的滚动并将频率分布输出到我所做的初始化为零的数组。

它的代码如下:

#include <iostream>
#include <cstdlib>

using namespace std;

int** rollDie(int numRolls, unsigned short seed, int** &rollarray)
{
srand(seed);
int side1, side2;
while (numRolls > 0)
{
side1 = 1 + rand() % 6;
side2 = 1 + rand() % 6;

rollarray[side1][side2]++;

numRolls--;
}
return rollarray;

}

int** initializeArray(void)
{
    int i, j;
    int** m = new int*[6];

    for (i = 0; i < 6; i++)
        m[i] = new int[6];

    for (i = 0; i < 6; i++)
        for (j = 0; j < 6; j++)
            m[i][j] = 0;

    return m;
}

int main()
{
int numRolls;
unsigned short seed;
int ** a = initializeArray();


cout << "rolls?\n";
cin >> numRolls;

cout << "seed?\n";
cin >> seed;
int ** b = rollDie(numRolls, seed, a);

int i,j;
for (i = 0; i < 6; i++) {
    for (j = 0; j < 6; j++) {
        cout << b[i][j];
    }
    cout << "\n";
    }

}

2 个答案:

答案 0 :(得分:1)

代码对我来说只有几个问题(我不得不猜测你如何定义a。下次再添加它):

在打印中,您应该在每个数字(次要)之后打印一个空格

在随机中,您选择索引为1+rand()%6,因此从1到6,但是当您打印时,您将索引从0到5!因此,您的第一行和第一列将为0。

除此之外似乎有效。

答案 1 :(得分:0)

只有当一个人去做并做其他事情时才会想到答案。我怀疑你宣布了一个:

int a[6][6];

这是一个包含36个整数的数组。但是,在你的函数中,你声明rollarray是一个指向整数指针数组的指针。您需要做的就是将函数签名更改为:

int* rollDie(int numRolls, unsigned short seed, int* rollarray)

正如cluracan所说,你也想使用0到5范围内的数组索引。

这是一个很好的理由,可以明智地使用打印语句,也可以通过调试器来查看实际情况。