我想将一个二维数组传递给一个函数,并且该数组的值不会在该函数中被修改。所以我正在考虑这样做:
#include <Windows.h>
static INT8 TwoDimArrayConst(const INT8 ai_Array[2][2]);
int main(void)
{
INT8 ai_Array[2][2] = { { { 1 }, { 2 } }, { { 3 }, { 4 } } };
(void)TwoDimArrayConst(ai_Array); // Message 0432: [C] Function argument is not of compatible pointer type.
return 1;
}
static INT8 TwoDimArrayConst(const INT8 ai_Array[2][2])
{
INT8 test = 0;
for (INT8 i = 0; i < 2; i++)
{
for (INT8 k = 0; k < 2; k++)
{
if (ai_Array[i][k] > 0)
{
test = 1;
}
}
}
if (test == 0)
{
test = 2;
}
return test;
}
但是,当我启用深度 5 QAC 设置时,它给了我 QAC 错误,因为我输入的是上面的代码注释:
// Message 0432: [C] Function argument is not of compatible pointer type.
如果我删除const
函数声明和定义中的 ,那么函数就像:
static INT8 TwoDimArrayConst(INT8 ai_Array[2][2]);
这个错误会消失,但会有另一个错误说:
> The object addressed by the pointer parameter 'ai_Array' is not > modified and so the pointer could be of type 'pointer to const'.
那么如何解决这个困境呢?我不能在 main 函数中将 ai_Array 定义为 const 数组,因为其他一些函数可能仍想修改该值。另外,我正在寻找在函数中仍然保持双括号(无需将行大小和列大小作为单独的参数传递)的解决方案,而不是将其视为一维数组。