Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia-IT-20_c__tsikly-massivy-ukazateli.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
104.45 Кб
Скачать

Пример 19. Вывод адресов ячеек массивов целого и вещественного типов

int a[4], *ptra, i;

float b[4], *ptrb;

ptra=a; //присваивает указателю адрес массива а

ptrb=b; // присваивает указателю адрес массива b

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

cout <<"Адрес ячейки массива а+"<<i<<": "<<(ptra+i)<<" массива b+"<<i<<": ""<<(ptrb+i) <<"\n";

На экране монитора появится, например, следующий результат:

Адрес ячейки массива а+0: 0х2е2112b2 массива b+0: 0х2е2112с0

Адрес ячейки массива а+1: 0х2е2112b4 массива b+1: 0x2e2112с4

Адрес ячейки массива а+2: 0х2е2112b6 массива b+2: 0x2e2112с8

Адрес ячейки массива а+3: 0х2е2112b8 массива b+3: 0x2e2112сс

Возникает вопрос:

почему 0x2e2112b2+1=0x2e2112b4 или почему 0х2е2112с0+1= 0х2е2112с4?

Такая ситуация возникает из-за того, что единицей адресации в первом случае является тип int (размер — 2 байта). Во втором случае для типа float единица адресации имеет размер 4 байта.

Прибавление единицы к указателю означает переход к следующему элементу массива независимо от типа его элементов.

Поэтому при объявлении указателей необходимо записывать тип объекта, чтобы компилятору было известно, сколько байтов добавлять к адресу при увеличении указателя на единицу.

Работа с указателями из рассмотренного примера графически изображена на рис. 1.

Рис. 1. Работа с указателями

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

Для начала рассмотрим пример объявления двумерного массива:

int mas[4][2];

int *ptr;

Выражение ptr=mas указывает на первый столбец первой строки матрицы (записи mas и &mas[0][0] равносильны).

Выражение ptr+1 указывает на mas[0][1], ptr+2 указывает на mas[1][0], ptr+3 – на mas[1][1], и т.д. ptr+7 указывает на mas[3][1].

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

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

mas[0][0]

ptr=mas

mas[0][1]

ptr+1

mas[1][0]

ptr+2

mas[1][1]

ptr+3

mas[2][0]

ptr+4

mas[2][1]

ptr+5

mas[3][0]

ptr+6

mas[3][1]

ptr+7

Рис. 2. Размещение двумерного массива в памяти

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]