Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Передача массива в функцию


Автор: alexeev 5.9.2013, 08:48
Здравствуйте, получается следующая ситуация:
Есть функция объявленная следующим образом:
Код

void function(long a[][100]);

Функция вызывается дважды, в одном месте с переменной a[5][100], где все нормально, и в другом, где a[5][98], на эту строчку компилятор ругается. Почему? Ведь фактически мы ждем массив большего размера...

Автор: feodorv 5.9.2013, 09:01
Цитата(alexeev @  5.9.2013,  09:48 Найти цитируемый пост)
на эту строчку компилятор ругается.

Компилятор - молодец!


Цитата(alexeev @  5.9.2013,  09:48 Найти цитируемый пост)
Ведь фактически мы ждем массив большего размера... 

Где ждём? В function()? А если у Вас в function() встретится конструкция вида 
Код
a[4][99] = 0;
то для массива a[5][98] это будет выход за его пределы. Если уж написали a[][100], то будьте добры обеспечить эти самые 100 элементов. 

Автор: feodorv 5.9.2013, 16:06
Учтите так же, что двумерный массив a[5][100] представляет собой единый участок памяти размером sizeof(a) * 5 * 100 байт (в сущности это одномерный массив ptr[5*100]), и местоположение элемента a[i][j] компилятор рассчитывает исходя из числа элементов строки (ptr[j+i*100]). Если определён другой массив aa[5][98], то для одних и тех же индексов i и j местоположение элемента a[i][j] относительно начала массива (то есть i+j*100) будет иным нежели для элемента aa[i][j] (то есть i+98*j). Иными словами это два разных массива с точки зрения доступа к элементам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)