Понимая, что многомерный массив, как и одномерный массив, является просто указателем на начало данных
Нет.Не в случае одного или многомерных массивов.Массивы - это блок данных.Это не указатель.Он преобразует в указатель на первый элемент, когда используется в большинстве других выражений (даже origF[i]
на самом деле *(origF + i)
), но это не сам указатель.
origF
это массив.Когда вы индексируете его, он преобразуется в указатель на массив для этой цели.Это становится int (*)[6][4]
.Вы также можете создавать такие указатели.
int (*p)[6][4] = origF; // Here origF is decaying to a pointer to its first element.
И когда на него разыменовывается, вы получаете выражение типа массива, int[6][4]
.Это также происходит "рекурсивно" для любого количества измерений.
Итак, вернемся к вашему примеру, вы хотели знать, что такое origF [i][j]
.Это выражение имеет тип массива.Тип int[4]
.Когда вы передаете его функции, она автоматически преобразуется в int*
.
Это на уровне языка, о чем авторы компилятора, похоже, не знают в то время.Там нет подозрительного преобразования происходит.Единственные подозрения должны быть направлены на того, кто запрограммировал это предупреждение.Это фактически предлагает вам добавить приведение (то есть просто замолчать) и потенциально нарушить вашу программу.Не то чтобы в том, что вы сделали, что-то не так, опять же, но это очень плохой совет в целом.
В любом случае, поскольку TurboC больше не поддерживается, вам будет гораздо лучше с современным компилятором.GCC и Clang являются бесплатными и открытыми программами, соответственно, и имеют очень высокий QoI.Вы должны взглянуть на них.