简单的解决方案——但没有指向二维数组的指针
该功能应该很简单:
#include <stdbool.h>
enum { size = 24 };
extern void change_to_true(bool array[][size], int i, int j);
void change_to_true(bool array[][size], int i, int j)
{
array[i][j] = true;
}
int main(void)
{
bool array[size][size];
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
array[i][j] = false;
change_to_true(array, i, j);
}
}
}
当然,我假设您拥有 C99 或 C2011 编译器。如果您坚持使用 C89,那么您必须为bool
and提供定义true
;其余的不需要改变。与false
.
使用指向二维数组的指针的解决方案
请注意,上面的代码严格来说并没有创建指向二维数组的指针。如果你真的非常确定这是你想要的,那么符号就会改变:
#include <stdbool.h>
enum { size = 24 };
extern void change_to_true(bool (*array)[][size], int i, int j);
void change_to_true(bool (*array)[][size], int i, int j)
{
(*array)[i][j] = true;
}
int main(void)
{
bool array[size][size];
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
array[i][j] = false;
change_to_true(&array, i, j);
}
}
}
但是,使用我能想到的正式的“指向数组的指针”没有任何好处——不是在这种情况下。
使用 C99 可变长度数组的解决方案
在 C99 中,您还可以使用 VLA(可变长度数组),如下所示:
#include <stdbool.h>
extern void change_to_true(int size, bool array[][size], int i, int j);
void change_to_true(int size, bool array[][size], int i, int j)
{
array[i][j] = true;
}
int main(void)
{
for (int size = 2; size < 10; size++)
{
bool array[size][size];
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
array[i][j] = false;
change_to_true(size, array, i, j);
}
}
}
}
请注意,大小必须在函数声明中的数组声明之前。是的,您还使用指向数组表示法的指针编写此代码(实际上,我首先编辑了指向数组表示法代码的指针,然后意识到我想要更简单的版本)。
使用哪个?
除非您有问题中未提及的令人信服的理由,否则第一个版本是要使用的代码。