将双维数组打印到控制台时,会随机设置值

时间:2016-07-04 09:26:08

标签: c++ arrays

让我们说我在主要功能中创建了一个双维数组:

int board[8][8] = {0};

当我使用MAIN中的简单FOR LOOP将其打印到控制台时,一切正常,控制台显示所有元素都已设置为0。

但是,当我尝试将此数组作为参数传递给print函数时,如下所示,某些元素被正确设置为0,而其余元素变为随机值:

void print_board (int (*array)[8][8]);

int main (){

    int board[8][8] = {0};
    print_board(&board);

return 0;
} 

void print_board (int (*array)[8][8]){
    for (int i = 0; i < 8; i++){
        for (int j = 0; j < 8; j++){
            cout << *array[i][j] << " ";
        }
        cout << endl;
    }
}

我玩指针和&符号,并试图谷歌,但我猜我错过了什么。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:3)

根据Operator Precedenceoperator[]的优先级高于operator*。因此*array[i][j]相当于*(array[i][j])array是指针(指向数组),而array[i]可能会在i >= 1时导致UB。

您应该将其更改为

cout << (*array)[i][j] << " ";

答案 1 :(得分:1)

您可以将输出更改为std::cout << (*array)[i][j]或简化操作:

void print_board(int array[8][8]){
    for (int i = 0; i < 8; i++){
        for (int j = 0; j < 8; j++){
            std::cout << array[i][j] << " ";
        }
        std::cout << std::endl;
    }
}


int main (){
    int board[8][8] = {0};
    print_board(board);
}