SortStrings ( ps, count ); // сортировкауказателей

for (i = 0; i < count; i ++)

puts (ps[i]); // вывод через указатели

}

Управление памятью

Указатели

Рассмотрим такую задачу: в файле записаны целые числа. Надо отсортировать их и записать в другой файл. Проблема заключается в том, что заранее неизвестно, сколько в файле таких чисел. В такой ситуации есть два варианта:

1. Выделить память с запасом, если известно, например, что этих чисел гарантированно не

более 1000.

2. Использовать динамическое выделение памяти – сначала определить, сколько чисел в

массиве, а потом выделить ровно столько памяти, сколько нужно.

Наиболее грамотным решением является второй вариант (использование динамических массивов). Для этого надо сначала поближе познакомиться с указателями.

Указатель – это переменная, в которой хранится адрес другой переменной или участка памяти.Указатели являются одним из основных понятий языка Си. В такие переменные можно записывать адреса любых участков памяти, на чаще всего – адрес начального элемента динамического массива. Что же можно делать с указателями?

Итак, что надо знать про указатели:

• указатель – это переменная, в которой записан адрес другой переменной;

• при объявлении указателя надо указать тип переменных, на которых он будет указывать, а

перед именем поставить знак *;

• знак & перед именем переменной обозначает ее адрес;

• знак * перед указателем в рабочей части программы (не в объявлении) обозначает значение ячейки, на которую указывает указатель;

• нельзя записывать по указателю, который указывает непонятно куда – это вызывает сбой

программы, поскольку что-то стирается в памяти;

• для обозначения недействительного указателя используется константа NULL;

• при изменении значения указателя на n он в самом деле сдвигается к n - ому следующему числу данного типа, то есть для указателей на целые числа на n*sizeof(int) байт;

• указатель печатаются по формату %p.

Теперь вам должно быть понятно, что многие функции ввода типа scanf и fscanf в самом

деле принимают в параметрах адреса переменных, например

scanf ("%d", &i);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: