ВУЗ:
Составители:
Рубрика:
15
Тогда для передачи массива функции sum следует использовать такую запись:
int s = sum(array,5);
т.е. указатель ar инициализируется по имени массива array и будет указывать на
его первый элемент.
Следует отметить, что все возможные изменения, выполненные с массивом
внутри функции sum(), сохраняются в массиве array. Это свойство можно
использовать для модификации элементов массива внутри функций. Например,
рассмотренная ранее функция strcpy(char *dest, char* src), выполняет изменение
массива, на который указывает указатель dest. Для
того чтобы «защитить»
массив от изменений следует использовать ключевое слово const либо при
объявлении массива, либо в объявлении аргумента функции как показано ниже.
char* strcpy(char* dest, const char* src)
{
while(*src != ‘\0’) *dest++ = *src++;
*dest = *src;
return dest;
}
В этом объявлении указатель src не может вносить изменения в переданный
массив при вызове данной функции, а может лишь передавать значения
указателю dest. В приведенном примере следует обратить внимание на
использование конструкции *dest++ и *src++. Дело в том, что приоритет
операции ++ выше приоритета операции *, поэтому эти выражения аналогичны
выражениям *(dest++) и *(src++). Таким образом, в строке
*dest++ = *src++;
сначала выполняется присваивание значений соответствующих элементов, на
которые указывают dest и src, а затем происходит увеличение значений
указателей для перехода к следующим элементам массивов. Благодаря такому
подходу осуществляется копирование элементов одного массива в другой.
Последняя строка примера *dest = *src, присваивает символ конца строки ‘\0’
массиву dest.
В общем случае можно выполнять следующие операции над указателями:
pt1 = pt2; //Присвоение
значения одного указателя другому
pt1 += *pt2; //Увеличение значения первого указателя на величину *pt2
pt1 -= *pt2; //Уменьшение адреса указателя на величину *pt2
pt1-pt2; //Вычитание значений адресов первого и второго указателей
pt1++; и ++pt1; //Увеличение адреса на единицу информации
pt1--; и --pt1; //Уменьшение адреса на единицу информации
Если указатели pt1 и pt2 имеют разные типы, то операция присваивания
должна осуществляться с приведением типов
, например:
Страницы
- « первая
- ‹ предыдущая
- …
- 13
- 14
- 15
- 16
- 17
- …
- следующая ›
- последняя »