让我们说我在主要功能中创建了一个双维数组:
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;
}
}
我玩指针和&符号,并试图谷歌,但我猜我错过了什么。
非常感谢你的帮助!
答案 0 :(得分:3)
根据Operator Precedence,operator[]
的优先级高于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);
}