【发布时间】:2021-08-23 23:50:53
【问题描述】:
所以我正在创建一个循环,该循环可以通过将 [3][3] 数组的元素设置为枚举 EMPTY 来创建 3x3 板。在调试时,我可以看到程序在出现内存访问冲突错误之前正确设置了数组的前三个元素,所以我知道这是数组第二行的地址有问题(当 'i' 变量从 0 变为 1)。我该如何解决这个问题?指针对我来说仍然有点混乱。
int main(void)
{
int board[3][3] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int* p = &board;
create_board(p);
print_board(p);
return 0;
}
void create_board(int *board)
{
for (int i = 0; i < 3; ++i)
{
for (int k = 0; k < 3; ++k)
{
(&board)[i][k] = EMPTY;
}
}
return;
}
【问题讨论】:
-
你的编译器没有抱怨吗?发出任何警告?
-
你认为这有什么作用?
(&board)[i][k] = EMPTY;我特别想知道您对&的作用的理解。 -
我知道 & 指的是地址,但我一直在玩 *board、(*board)、board 和 &board 实际编译,所以我只是坚持...:/
-
没有必要从返回
void的函数中return。 -
&boardinsidecreate_board获取指针的地址,即局部变量board,从技术上讲,它位于堆栈的某个位置。该变量的地址与main函数中的board变量完全无关。如果您对该指针执行索引操作,您最终会到达您想要的任何其他位置。
标签: c pointers multidimensional-array implicit-conversion function-definition