Полезно за вас: Речник | Игри | Новини | Фирми | Рецепти | Обяви
Начало на реферати

Указатели и масиви. Указатели на едномерни масиви. Указатели на двумерни масиви


Информационни технологии | 2009-12-04 | 210 сваляния

15. Указатели и масиви. Указатели на едномерни масиви. Указатели на двумерни масиви.

В C++ има интересна и полезна връзка между указателите и масивите. Изразява се в това, че имената на масивите са указатели към техните първи елементи. Последното позволява указателите да се разглеждат като алтернативен начин за обхождане на елементите на даден масив.


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


Нека a е масив, дефиниран по следния начин:

int a[100];

Тъй като a е указател към а[0], *a е стойността на a[0], т.е. *a и a[0] са два различни записа на стойността на първия елемент на масива. Тъй като елементите на масива са разположени последователно в паметта, a + 1 е адреса на a[1], a + 2 е адреса на a[2] и т.н. a + n-1 е адреса на a[n-1]. Тогава *(a+i) е друг запис на a[i] (i = 0, 1, ..., n-1).

Има обаче една особеност. Имената на масивите са константни указатели. Заради това, някои от аритметичните оператори, приложими над указатели, не могат да се приложат над масиви. Такива са ++, -- и присвояването на стойност.


Следващата програма показва два начина за извеждане на елементите на масив.

#include

int main()

{int a[] = {1, 2, 3, 4, 5, 6};

int i;

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

cout << a[i] << 'n';

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

cout << *(a+i) << 'n';

return 0;

}

Операторът

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

{cout << *a << 'n';

a++;

}

съобщава за грешка заради a++ (a е константен указател и не може да бъде променян). Може да се поправи като се използва помощна променлива от тип указател към int, инициализирана с масива a, т.е.

int* p = a;

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

{cout << *p << 'n';

p++;

}

Използването на указатели е по-бърз начин за достъп до елементите на масива и заради това се предпочита. Индексираните променливи правят кода по-ясен и разбираем. В процеса на компилация всички конструкции от вида a[i] се преобразуват в *(a+i), т.е. операторът за индексиране [] се обработва от компилатора чрез адресна аритметика. Полезно е да отбележим, че операторът [] е ляво-асоциативен и с по-висок приоритет от унарните оператори (в частност от оператора за извличане на съдържание *).

Указатели и двумерни масиви

Името на двумерен масив е константен указател към първия елемент на едномерен масив от константни указатели. Ще изясним с пример казаното.

Нека a е двумерен масив, дефиниран по следния начин:

int a[10][20];

Променливата a е константен указател към първия елемент на едномерния масив a[0], a[1], ..., a[9], като всяко a[i] е константен указател към a[i][0] (i = 0,1, ..., 9)

Задача 67. Да се напише програма, която въвежда по редове правоъгълна матрица Anxk от цели числа. Конструира матрица, образувана от редовете на A от четна позиция, след което я извежда като увеличава с 1 всеки неин елемент. Конструира матрица, образувана от редовете на A от нечетна позиция, след което я извежда като увеличава с 2 всеки неин елемент. И накрая, ако n е четно, извежда сумата на матриците от редовете от четните и нечетните позиции на A (без увеличенията с 1 и 2).

Програма Zad67.cpp решава задачата. Матрицата от редовете на А от четна позиция е конструирана в масива от указатели p, а матрицата от редовете на А от нечетна позиция е конструирана в масива от указатели q. Конструирането на масива p е реализирано чрез фрагмента:

int m = -1;

for (i = 0; i <= n-1; i = i+2)

{m++;

*(p+m) = *(a+i);

}

Стойността на p[0] е адреса на a[0][0], стойността на p[1] е адреса на a[2][0], стойността на p[2] е адреса на a[4][0] и т.н. Масивът q е конструиран по аналогичен начин, но стойността на q[0] е адреса на a[1][0], стойността на q[1] е адреса на

Указатели и масиви. Указатели на едномерни масиви. Указатели на двумерни масиви

Добави своя коментар:



Тагове от реферата: , , ,


Подобни материали


Проектиране на релационни бази от данни. Функционални зависимости. Аксиоми на Армстронг. Нормализация Информационни технологии | 2010-11-15 | 85 прочитания
Физическа организация на данните. Основни операции на физическо ниво.Търсене.Модификация Информационни технологии | 2010-11-15 | 60 прочитания
Стартирани процеси в Windows Информационни технологии | 2010-11-15 | 145 прочитания
информатика 1 Информационни технологии | 2010-11-15 | 124 прочитания
Принципи на цифровия запис и възпроизвеждане Информационни технологии | 2010-11-15 | 33 прочитания
Интегрален таймер Информационни технологии | 2010-11-15 | 38 прочитания
Сричкопренасяне в документ Информационни технологии | 2010-11-15 | 125 прочитания
Съвети при покупка на хард диск HDD Информационни технологии | 2010-11-15 | 154 прочитания
Програмиране на Супер Паскал Информационни технологии | 2010-11-16 | 150 прочитания
Цифрово подписване на документи в Java-базирани Web-приложения Информационни технологии | 2010-11-16 | 240 прочитания