Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ИНФОРМАТИКИ И ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ СИ. Лабораторный практикум доцента кафедры «Информационные системы и компьютерные технологии» Пановой Т.В. БГТУ «ВОЕНМЕХ».doc
Скачиваний:
146
Добавлен:
26.03.2015
Размер:
1.27 Mб
Скачать

Лабораторная работа №8

Тема

Указатели и одномерные массивы данных

Цель: получение практических навыков решения задач обработки массивов с использованием указателей.

I. Теоретические сведения.

1. Указатели

Переменная в программе – объект, имеющий имя и значение. По имени можно обратиться к переменной и получить ее значение. Имя переменной соответствует адресу участка памяти, выделенного для переменной, и явно не связано с адресом. Значение переменной соответствует содержимому участка памяти. Чтобы получить адрес в явном виде, используется унарная операция взятие адреса (&), которая применима только к объектам, имеющим имя и размещенным в памяти.

Адреса имеют целочисленные беззнаковые значения, поэтому их можно обрабатывать как целочисленные величины, для этого используются переменные типа указатель, обеспечивающие непосредственную взаимосвязь данных и возможность изменения этих связей. Указатель – переменная, содержащая информацию о расположении в памяти другой переменной, т.е. адрес объекта конкретного типа (адрес другой переменной). Значением указателя может быть также нулевой адрес, для обозначения которого в ряде заголовочных файлов (stdio.h) определена специальная константа null.

Структура объявления указателя:

<тип_указуемых_данных> *<имя_указателя>;

Символ «*» – знак унарной операции косвенной адресации (разыменования), являющейся операцией раскрытия ссылки (обращения по адресу), результатом которой является объект, адресуемый указателем.

Например,

char *z; // указатель на объект символьного типа

int *k; // указатель на объекты целого типа

float *f; // указатель на объект вещественного типа

Переменные z, k, f являются указателями. *z обозначает объект типа char, на который указывает z. Обозначения *z, *k, *f имеют права переменных соответствующих типов. Оператор *z=’ ‘ засылает символ пробел в тот участок памяти, адрес которого определяет указатель z.

Указатель может ссылаться на объекты того типа, который присутствует в объявлении указателя. Исключением являются указатели, в объявлении которых использован тип void, т.е. отсутствие значения. Такие указатели могут ссылаться на объекты любого типа, однако к ним нельзя применять операцию разыменования.

Например,

1. Объявление переменных:

int a,x; // целые переменные

int *p; // переменная – указатель на другую целую переменную (объявление переменной, при косвенном обращении к которой получается значение переменной целого типа)

2. Операции присваивания объявленным переменным:

a=2000;

p=&a; // указатель содержит адрес переменной a (присваивание переменной p адреса переменной a – назначение указателя p на переменную a)

3. Использование косвенного обращения:

x=x+*p; // при косвенном обращении по указателю p берется значение переменной a, что эквивалентно: x=x+a

2. Массив как статическая структура данных

Статическая (фундаментальная) структура данных – совокупность фиксированного количества данных постоянной размерности с неизменным характером связей между ними.

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

К статическим структурам, в частности, относится массив данных, который представляет собой упорядоченную последовательность данных одного и того же типа, имеющих общее имя; доступ к элементам массива осуществляется при помощи индексов, являющихся порядковыми номерами элементов в последовательности. На этапе компиляции под элементы массива выделяется фиксированный объем памяти, который не меняется в процессе выполнения программы. В памяти элементы массива размещаются последовательно в соответствии с ростом индекса.

Соседние файлы в предмете Программирование