使用在一个函数中声明的数组到另一个函数

时间:2014-03-02 19:01:28

标签: c++ function

我目前正处于编程的一部分。 我已经创建了一个函数来获取2D数组的行数和列数,然后使用输入文件中的信息填充该数组。

我现在需要在另一个函数中使用该数组来显示数组。 这是当前的代码。 此外,我不能以任何方式修改函数定义,所以我很确定我必须使用指针,这些真的让我很困惑。

有人可以澄清或帮助吗?

void populateWorld (const char * file)
{

int numchar = 0;
int numline = 0;
char a;
ifstream inFile;
inFile.open("glider_gun_fight.txt");
inFile.get(a);
while(inFile)
{
    while(inFile && a != '\n')
    {
        numchar = numchar + 1;
        inFile.get(a);
    }
    numline = numline + 1;
    inFile.get(a);
}
ROWS = numline;
COLUMNS = numchar / numline;
inFile.close();

inFile.open("glider_gun_fight.txt");


char gameBoard[ROWS][COLUMNS];
for(int r = 0; r < ROWS; r++)
{
    for(int c = 0; c < COLUMNS; c++)
    {
        inFile >> gameBoard [r][c];
    }
}
inFile.close();
}

//This function outputs the grid for current generation (add high level 
//description of your implementation logic) 
void showWorld ()
{
for(int r = 0; r < ROWS; r++)
{
    for(int c = 0; c < COLUMNS; c++)
    {
        cout << gameBoard [r][c];
    }
    cout << endl;
}
}

2 个答案:

答案 0 :(得分:0)

在不更改函数声明的情况下,您无法在外部世界中传递此函数中创建的数组。:) 还要考虑到您的功能不符合C ++。在C ++中,数组大小在编译时是常量表达式。 Moover如果文件包含制表符,则其输出可能与您预期的不同。

答案 1 :(得分:0)

在不更改函数声明的情况下,剩下的唯一可能性是全局变量:

char **gameBoard;

void populateWorld (const char * file) {
    //...
    //char gameBoard[ROWS][COLUMNS]; //Not local anymore, instead allocate dynamically:
    gameBoard = new char*[ROWS];
    for(int r = 0; r < ROWS; r++)
    {
        gameBoard[r] = new char[COLUMNS];
        for(int c = 0; c < COLUMNS; c++)
        {
            inFile >> gameBoard [r][c];
        }
    }
    //...
}

然后另一个功能按原样工作。但是应该避免全局变量。 (虽然ROWSCOLUMNS似乎已经是全球性的,但是还有一个不会造成太大的伤害。)

当不再需要delete[]时,不要忘记再次释放已分配的内存。

正如我所说,C ++中还有其他方法,例如stringgetlinevector,其中一个方法应该使用。