Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры оп.docx
Скачиваний:
4
Добавлен:
25.09.2019
Размер:
116.07 Кб
Скачать
  1. Указатели

  1. Указатели предоставляют способ, позволяющий функциям модифицировать передаваемые аргументы.

  2. Указатели используются для динамического выделения памяти.

  3. Использование указателей может повысить эффективность работы некоторых программ.

  4. Указатели, как правило, используются для поддержки некоторых структур данных типа связанных списков и двоичных деревьев.

Указатели – это адреса.

Указатель содержит адрес памяти. Как правило, данный адрес содержит местоположение какой-либо переменной в памяти. Если одна переменная содержит адрес другой, то говорят, что первая переменная указывает на вторую.

Переменные-указатели

Если переменная должна содержать указатель, она объявляется следующим образом:

тип *имя; где тип – это любой допустимый тип (базовый тип указателя), а имя – это имя переменной-указателя. Все арифметические действия с указателями выполняются применительно к базовому типу. Поэтому базовый тип указателя играет важную роль.

Операторы для работы с указателями

Имеется два специальных оператора для работы с указателями - * и &.

Оператор & - это унарный оператор, возвращающий адрес операнда. Например:

p=# помещает адрес переменной num в p.

Оператор * - это унарный оператор, возвращающий значение переменной, находящейся по указанному адресу. Например, если р содержит адрес памяти переменной num, то

q=*p; поместит значение num в q.

Пример:

#include <stdio.h>

int main(){

int num, q;

int *p;

num = 100;

p=&num;

q=*p;

printf("%d\n", q);

return 0;

}

Арифметические действия с указателями

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

  1. Односвязные списки

Организация данных, способ их расположения в памяти, зависит от алгоритма, который будет использоваться.

Односвязный список – это способ соединения объектов, таким образом, когда каждый объект указывает на следующий объект в этом списке. Порядок расположения объектов зависит от приложения, и обычно это просто порядок, в котором программа встречает данные. Списки особенно полезны тогда, когда порядок элементов в них не играет роли.

Списки особенно полезны в тех случаях, когда данные в памяти необходимо запоминать сразу же, а мы заранее не знаем, сколько данных можем получить, или когда требуется переставлять данные произвольным образом.

Хотя структура данных не может содержать экземпляр самой себя, она может содержать указатель на экземпляр самого себя. Если используется этот указатель, чтобы указывать на следующий элемент в списке, можно быстро и просто создавать списки, а также добавлять новые элементы в любое место списка, в том числе и в начало. Потребуется «сигнальное» значение для обозначения конца списка, и значение NULL подходит для этой цели превосходно.