将数组传递给C ++中的函数

时间:2014-08-25 21:13:24

标签: c++ arrays pointers

我正在尝试用C ++重新创建游戏2048。

我正在研究spawn功能。它接收16个点的当前值的数组,随机扫描空点,并在该点放置2或4。

我开始使用测试数组b。我想将这个数组传递给一个函数,该函数将改变它的一个值,我知道我需要通过传递一个指针来完成,但是在我离开函数之后没有任何改变。

有谁能看到这里有什么问题?如何正确传递数组,以便在生成函数之后保留更改?

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void showBoard(int board[]);
void spawn(int* board);

int main() {
    srand(time(NULL));

    int b[16] = {2, 2, 2, 2};
    int* bp = b;

    showBoard(b);
    spawn(bp);
    showBoard(b);
}

// print out the 16 current tiles to the console
void showBoard(int board[]) {
    for(int i=0; i<=15; ++i){
        if(i%4==0)
            cout<<'\n';
        cout<<board[i]<<"     ";
    }
    cout<<'\n';
}

void spawn(int* board) {
    int x; // index

    // randomly choose an index to spawn a 2 or 4:
    do x=rand()%16; while(board[x]!=0);
    // when found empty place (with value 0), spawn a new tile.
    /* there should be a 90% chance of spawning a 2
     * and a 10% chance of spawning a 4. Generate a
     * random number between 0 and 9, and if it is
     * 9, make the new spawn tile a 4.
     */
    if (rand()%10 == 9) {
        board[x] == 4;
        cout << "added 4 \n";
    }
    else {
        board[x] == 2;
        cout << "added 2 \n";
    }
}

输出:

2     2     2     2
0     0     0     0
0     0     0     0
0     0     0     0
added 2 
2     2     2     2
0     0     0     0
0     0     0     0
0     0     0     0

所以我的cout确认我到了if块,我将board[x]设置为2,但是当我之后showBoard时,没有更新数组。有什么帮助吗?

1 个答案:

答案 0 :(得分:4)

board[x] == 2;
board[x] == 4;

需要:

board[x] = 2;
board[x] = 4;

此外,如果您将其设为2D 4x4阵列,它可能会使代码更简单。随机挑选一个正方形将成为:

int x = rand() % 16;
int board_spot = board[x%4][x/4];