Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Используя указатели и операции над ними выполнить следующие задания

Часа

Методические материалы

Указатели и Массивы.

В С++ существует тесная связь между указателями и массивами. Любой доступ к элементу массива, осуществляемый операцией индексирования, может быть выполнен при помощи указателя.

Объявление int a[10]; определяет массив а размера 10, т.е. блок из 10 последовательных объектов с именами а[0], a[1],..., a[9].

Запись a[i] отсылает нас к i-му элементу массива. Если pa есть указатель на int, т.е. определен как int *pa; то в результате присваивания pa=&a[0]; pa будет указывать на нулевой элемент а; иначе говоря, ра будет содержать адрес элемента а[0].

Теперь присваивание x=*pa;

будет копировать содержимое a[0] в х. Если ра указывает на некоторый элемент массива, то ра+1 по определению указывает на следующий элемент, ра+i - на i-ый элемент после ра, а ра-i - на i-ый элемент перед ра. Таким образом, если ра указывает на а[0], то *(ра+1) есть содержимое а[1], pa+i - адрес а[i], a *(pa+i) - содержимое a[i].

Сделанные замечания верны к типу и размеру элементов массива а. Смысл слов "добавить 1 к указателю", как и смысл любой арифметики с указателями, в том, чтобы ра+1 указывал на следующий объект, а ра+i - на i-й после ра.

Между индексированием и арифметикой с указателями существует очень тесная связь. По определению имя масива - это адрес его нулевого элемента. После присваивания

pa=&a[0];

pa и а имеют одно и то же значение. Поскольку имя массива есть не что иное, как адрес его начального элемента, присваивание ра=&a[0]; можно также записать в следующем виде:

ра=a;

Еще более удивительно (по крайней мере на первый взгляд) то, что а[i] можно записать как *(a+i). Встречая запись a[i], компилятор сразу преобразует ее в * (а+i); указанные две формы записи эквивалентны. Из этого следует, что полученные в результате применения, оператора & записи &a[i] и a+i также будут эквивалентны, т.е. и в том и в другом случае это адрес i-го элемента после а. С другой стороны, если ра - указатель, то в выражениях его можно использовать с индексом, т.е. запись ра[i] эквивалентна записи *(ра+i). Элемент массива одинаково разрешается изображать и в виде указателя со смещением, и в виде имени массива с индексом.

Между именем массива и указателем, выступающим в роли имени массива, существует одно различие. Указатель - это переменная, поэтому можно написать ра=а или ра++. Но имя массива является константой, и записи типа а=ра или а++ не допускаются.

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

#include <iostream.h>void main(){ const int ArraySize=10; //объявили константу для задания размерности массива int A[ArraySize], *p, i; //объявили: массив A из ArraySize элементов типа int; указатель p на int; //переменную i типа int p=A; /*указателю p присвоили адрес нулевого элемента массива (вспомним, имя массива содержит адрес его нулевого элемента)*/ for (i=0; i<ArraySize; i++) { cout<<"Do enter A["<<i<<"] element -->"; cin>>p[i]; //p[i] - можно заменить на: *(p+i), *(A+i) или на привычное нам A[i] } int min=*p, index=0; for (i=1;i<ArraySize;i++) if (min>*(p+i)) { min=*(p+i); //*(p+i) - можно заменить на: p[i], *(A+i) или на привычное нам A[i] index=i; } cout<<"\n\nMinimum was found!\nValue = "<<min<<"\nIndex ="<<index<<endl; //Вывели на экран результаты работы нашей программы}

 

 

Содержание работы:

Используя указатели и операции над ними выполнить следующие задания

Задания

  1. Дан массив целых чисел. Воспользовавшись указателями, поменяйте местами элементы массива с четными и нечетными индексами (т.е. те элементы массива, которые стоят на четных местах, поменяйте с элементами, которые стоят на нечетных местах).
  2. Дан массив целых чисел. Воспользовавшись указателями, поменяйте значения элементов массива с по порядку индексами (т.е. первый элемент массива становится последним,второй –предпоследним и тд).
  3. Даны два массива, упорядоченных по возростанию: А[n] и B[m]. Сформируйте массив C[n+m], состоящий из элементов массивов А и В, упорядоченный по возростанию.
  4. Даны два массива: А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать элементы обоих массивов;
  5. Даны два массива: А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать общие элементы двух массивов;
  6. Даны два массива: А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать элементы массива A, которые не включаются в B;
  7. Даны два массива: А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать элементы массива B, которые не включаются в A;
  8. Даны два массива: А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать элементы массивов A и B, которые не являются общими для них (то есть объединение результатов двух предыдущих вариантов


<== предыдущая лекция | следующая лекция ==>
Тип Членистоногие (Artropoda). Тема занятия: ТИП ЧЛЕНИСТОНОГИЕ /Artropoda/. | Идеология функционирования Windows. Plug and Play, Drag and Drop, Clipboard, Recycle Bin, OLE, многозадачность, распределение памяти.
Поделиться с друзьями:


Дата добавления: 2016-12-18; Мы поможем в написании ваших работ!; просмотров: 324 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2498 - | 2247 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.