>> Вот так?
>> (Или я не понял что вы спрашиваете)
> Не подходит. Вариант с приведением типов уже предлагали выше.
> Проблема решилась.
> Оказывается: 1.
Большая часть путаницы вокруг указателей в С происходит от
непонимания этого утверждения. "Эквивалентность" указателей и
массивов не позволяет говорить не только об идентичности, но и
взаимозаменяемости.
"Эквивалентность" относится к следующему ключевому определению:
значение типа массив-Т, которое появляется
в выражении, превращается (за исключением трех случаев) в
указатель на первый элемент массива; тип результирующего
указателя - указатель-на-Т.
(Исключение составляют случаи, когда массив оказывается операндом
sizeof, оператора & или инициализатором символьной строки для
массива литер.)
Вследствие этого определения нет заметной разницы в поведении
оператора индексирования [], если его применять к массивам и
указателям. Согласно правилу, приведенному выше, в выражении типа
а[i] ссылка на массив "a" превращается в указатель и дальнейшая
индексация происходит так, как будто существует выражение с
указателем p[i] (хотя доступ к памяти будет различным.
В любом случае выражение x[i], где х - массив или указатель)
равно по определению *((x)+(i)).
Смотри: K&R I Разд.5.3 c.93-6; K&R II Разд.5.3 c. 99; H&S
Разд.5.4.1 c. 93; ANSI Разд.3.2.2.1, Разд.3.3.2.1,
Разд.3.3.6 .
2: Как объявить указатель на массив?
О: Обычно этого делать не нужно. Когда случайно говорят об указателе на
массив, обычно имеют в виду указатель на первый элемент массива.
Вместо указателя на массив рассмотрим использование указателя на один
из элементов массива. Массивы типа T превращаются в указатели типа Т
(см. 1), что удобно; индексация или увеличение указателя
позволяет иметь доступ к отдельным элементам массива. Истинные
указатели на массивы при увеличении или индексации указывают на
следующий массив и в общем случае если и полезны, то лишь при
операциях с массивами массивов.
Если действительно нужно объявить указатель на целый массив,
используйте что-то вроде "int (*ap)[N];" где N - размер массива.
Если размер массива неизвестен, параметр N может быть опущен, но
получившийся в результате тип " указатель на массив неизвестного
размера" - бесполезен.
3. Исходя из того, что ссылки на массив превращаются в указатели,
скажите в чем разница для массива
int array[NROWS][NCOLUMNS];
между array и &array?
O: Согласно ANSI/ISO стандарту C, &array дает указатель типа
"указатель-на-массив-Т", на весь массив
В языке C до выхода стандарта ANSI оператор & в &array игнорировался,
порождая предупреждение компилятора. Все компиляторы C, встречая
просто имя массива, порождают указатель типа указатель-на-Т, т.е. на
первый элемент массива. (Cм. 1)