Передача многомерных массивов в функции в C

Почему необходимо указывать количество элементов C-массива, когда он передается в качестве параметра в функцию (10 в следующем примере)?

void myFun(int arr[][10]) {}

Так ли это, потому что количество элементов необходимо для определения адреса ячейки, к которой осуществляется доступ?

3 ответа

Решение

Да. Это потому что arr[i][j] средства ((int *)arr)[i * N + j] если arr является int [][N]: указатель-арифметика требует длины строки.

Компилятор должен иметь представление, когда следующая строка начинается в памяти (поскольку двумерный массив - это просто непрерывный кусок памяти, один ряд за другим). Компилятор это не психика!

Это необходимо, только если вы использовали статическое размещение для вашего массива. Поскольку сгенерированный код создает непрерывный блок памяти для массива, как указано в ruakh.

Однако, если вы используете динамическое размещение, это не обязательно, вам нужно только передать указатели.

С уважением

Другие вопросы по тегам