Я хочу передать двумерный массив в функцию, и значение массива не будет изменено в этой функции.Поэтому я думаю о том, чтобы сделать это следующим образом:
#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;
}
Однако, это дало мне ошибку QAC, когда я включил настройку глубину 5 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'.
Так как решить эту дилемму?Я не могу определить ai_Array как массив const в основной функции, так как некоторые другие функции все еще могут захотеть изменить значение.Кроме того, я ищу решение, которое по-прежнему поддерживает двойные скобки (не нужно передавать размер строки и размер столбца в качестве отдельных аргументов) в функции, а не обрабатывать ее как одномерный массив.