Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota_7.doc
Скачиваний:
1
Добавлен:
12.07.2019
Размер:
135.68 Кб
Скачать

Лабораторная работа № 7 Указатели и массивы

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

Для вывода на дисплей адреса, который хранит указатель, используем спецификатор %u в функции printf. С помощью этой функции можно вывести адреса, по которым лежат переменные:

printf("i = %p\n", &i);

массивы (имя массива есть указатель на его начальный элемент):

printf("Ar = %p\n", Ar);

и т.д. С помощью указателя можно обращаться к элементам масисва:

*(Ar + k).

Пример 1. Заполнить статический массив последовательностью чисел с использованием указателя:

#define N 20 // размер массива

int main(int argc, char* argv[])

{

int Ar[N];

short i, j; // текущие индексы

int k;

printf("i = %p\n", &i); // Адреса переменных

printf("j = %p\n", &j);

printf("k = %p\n", &k);

printf("Ar = %p\n", Ar); // Адрес массива

for (i = 0; i < N; i++) // Заполнение массива данными

*(Ar + i) = i+1;

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

printf("%3d",Ar[i]); // Обращение к элементу массива по индексам

printf("\n");

for (k = 0; k < N; k++)

printf("%3d", *(Ar + k)); // Обращение к элементу массива по указателю,

printf("\n");

getch();

return 0;

}

Результат работы программы:

Адреса переменных и массива лежат рядом. Обращение к элементам массива по индексу или через указатель совершенно эквивалентны.

Пример 2. Создать и заполнить динамический массив последовательностью чисел с использованием указателя:

#define N 20 // размер массива

Int main(int argc, char* argv[])

{

int *DAr;

short i, j; // текущие индексы

int k;

DAr = new int[N];

printf(" DAr = %p \n", DAr);

for (i = 0; i < N; i++) // перебор строк

*( DAr + i) = i+1;

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

printf("%3d", DAr[i]); // Обращение к элементу массива по индексам

for (k = 0; k < N; k++)

printf("%3d", *(DAr + k)); // Обращение к элементу массива по указателю,

printf("\n");

delete[] DAr;

getch();

return 0;

}

Результат работы программы:

Адреса переменных и указателя лежат рядом. Адрес массива сильно отличается, т.к. для массива память выделялась динамически с помощью оператора new в так называемой динамической памяти. Указатель Darr и хранит адрес начала выделенной памяти. Обращение к элементам массива по индексу или через указатель совершенно эквивалентны, так же как и для статического массива.

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

Пример 3. Заполнить двумерный статический массив, а также создать и заполнить дву-мерный динамический массив последовательностью чисел с использованием указателя:

#define N 5 // размер массива

//---------------------------------------------------------------------------

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