Цитата(John851 @ Jul 7 2010, 00:05)

как мне известно - имя массива со смещением это и есть указатель
Неверно. Только само имя массива может служить адресом. Имя массива с указанием индекса (смещения) как аргумент функции это передача
значения элемента массива. Если вы хотите передать его (элемента массива) адрес через указатель, то нужно дополнить операцией извлечения адреса. Потому, что при индексации компилятором учитывается
размер элементов массива и способ доступа к ним.
Прототип функции должен выглядеть как
Код
void foo (char *ptr1, char *ptr2);
Вызов функции
Код
foo (&mas[4], &mas[8]);
А вот следующие две записи действительно дают идентичный результат
Код
foo (mas, &mas[10]);
Код
foo (&mas[0], &mas[10]);
При несовпадении типов указателей и необходимости приведения их типов нужно делать это явным образом
Код
foo ((char *)&mas[0], (char *)&mas[8]);
Если же, например, требуется обработать элементы массива другого типа (например, побайтовая обработка массива 32-х разрядных чисел), то так
Код
foo (&((char *)mas32)[0], &((char *)mas32)[8]);
В последнем случае индекс указывает на смещение в
байтах, т.к. указатель предварительно к "байтовому" типу char приведен. Слово "байтовому" взято в кавычки по причине того, что в соответствии со стандартом СИ нет однозначной привязки типа char к байту (8-бит).
Так что zltigo вполне справедливо отсылает вас к букварю