I want to pass a 2D array to a function, and the value of the array will not be modified in that function. So I am thinking about doing this way:
#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;
}
However, it gave me the QAC error when I enabled depth 5 QAC setting as the one I put is the code comment above:
// Message 0432: [C] Function argument is not of compatible pointer type.
If I remove the const in the function declaration and definition, so the function is like:
static INT8 TwoDimArrayConst(INT8 ai_Array[2][2]);
this error will be gone, but there will be another error saying:
> The object addressed by the pointer parameter 'ai_Array' is not > modified and so the pointer could be of type 'pointer to const'.
So how to resolve this dilemma? I cannot define ai_Array to be const array in the main fuction since some other function may still want to modify the value. Also, I am looking for the solution that still maintain the double brackets(no need to pass row size and column size as separate arguments) in the function, instead of treat it as a 1D array.
 
    