Общие сведения. Лабораторная работа №4. Одномерные массивы и указатели

Лабораторная работа №4. Одномерные массивы и указатели

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

Общие сведения.

Массивы - это последовательная группа ячеек памяти, имеющих одинаковое имя. Доступ к отдельным элементам массивов организуется посредством указания имени массива и порядкового номера (индекса) необходимого элемента. Индекс определяет положение элемента относительно начала массива.

При описании массива необходимо указать:

1) тип элементов;

2) имя массива;

3) размерность массива.

Общая форма описания массива имеет вид:

тип имя_масссива [размер1][размер 2]….;

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

float A[5], B[25];

При описании можно инициализировать элементы массива заданными значениями.

Например:

int D[5]={23, 45, 32, 12, 88};

В языке Си элементы в массиве нумеруются, начиная с нуля, т.е. индекс первого элемента равен 0, а индекс последнего элемента – на единицу меньше размера массива.

Связь между указателями и массивами. В языке Си массивы и указатели тесно связаны.

Указатель – это переменная, в которой хранится адрес другой переменной или участка памяти.

Указатель объявляется следующим образом:

тип *<имя переменной>;

Указатели объявляются в списке переменных, но перед их именем ставится знак *. Указатель всегда указывает на переменную того типа, для которого он был объявлен.

Унарная операция &, примененная к некоторой переменной, показывает, что нам нужен адрес этой переменной, а не ее текущее значение. Если переменная uk объявлена как указатель, то оператор присваивания uk=&x означает: "взять адрес переменной x и присвоить его значение переменной-указателю uk".

Унарная операция *. примененная к указателю, обеспечивает доступ к содержимому ячейки памяти, на которую ссылается указатель. Например, *uk можно описать словами как " то, что содержится по адресу, на который указывает uk".

Доступ к любому элементу массива может быть выполнен с помощью указателей. Если uk -указатель на целое, описанный как int *uk, то uk после выполнения операции uk=&a[0] содержит адрес a[0], а uk+i указывает на i -й элемент массива. Таким образом, uk+i является адресом a[i]. Так как имя массива в программе отождествляется с адресом его первого элемента, то выражение uk=&a[0] эквивалентно такому: uk=a. Поэтому значение a[i] можно записать как *(a+i). Применив к этим двум элементам операцию взятия адреса, получим, что &a[i] и a+i идентичны.

Рассмотрим пример программы, которая печатает строку символов в обратном порядке.

#include <stdio.h>
main()
{
char *uk1,*uk2;
uk1=uk2="ЯЗЫКИ И ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ";
while(*uk2!='\0')
putchar(*uk2++);
putchar('\n');
while(--uk2 >= uk1)
putchar(*uk2);
putchar('\n');
}

В самом начале указателям uk1 и uk2 присваивается начальный адрес строки "ЯЗЫКИ И ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ". Затем строка посимвольно печатается и одновременно указатель uk2 смещается вдоль строки. В конце вывода uk2 указывает на последний символ исходной строки. Во втором цикле while все тот же указатель uk2 начинает изменяться в обратном направлении, уменьшаясь до тех пор, пока он не будет указывать на нулевой элемент массива, обеспечивая выдачу строки в обратном порядке.


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



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