Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вказівники та посилання.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
857.42 Кб
Скачать

14 Лекція №14

Тема: Вказівники та адресна арифметика

ПЛАН

14.1 Вказівники

14.2 Ініціалізація вказівників

14.3 Операції з вказівниками

14.4 Динамічні масиви

Час: 2 год.

Література:

14.1 Вказівники Лекція № 2 - Вказівники та посилання

1.2.

1.2.1. Вказівники

Тема: Масиви та вказівники, доступ до елементів масиву через індексні вказівники й динамічне виділення пам'яті, С, С++

Приклади програм, коментарі

Програма 5

Мета роботи: Оволодіння навичками використання індексних виразів та вказівників при роботі з багатовимірними масивами та виведення на екран елементів псевдографіки у текстовому режимі.

Дано послідовність чисел b1,...,bn. Отримати квадратну матрицю порядку n, елементами якої є числа b1,...,bnn, розташовані за схемою:

Опис змінних

**a

int

Показівник на матрицю

*b

int

Показівник на перший елемент послідовності чисел

n

int

Розмірність a та b

Опис функцій

Ім'я функції

Тип значення, що повертається

Призначення

Параметри

Ім'я

Тип

Призначення

main

void

Головна функція програми

-

-

-

inputvector

void

Введення одновимірного масиву

*m

int

Показівник на перший елемент масиву

n

int

Довжина масиву

outputmatrix

void

Виведення двовимірного масиву

*k

int

Показівник на перший елемент масиву

n

int

Розмірність масиву

zmeyka

void

Заповнення матриці елементами одновимірного масиву за заданою схемою

*b

int

Показівник на перший елемент одновимірного масиву

*a

int

Показівник на перший елемент вихідної матриці

n

int

Розмірність масиву

Текст програми

#include <stdio.h> #include <conio.h> #include <alloc.h> #include <stdlib.h> #include <math.h> void inputvector(int *,int n); void outputmatrix(int *,int n); void zmeyka(int *,int *,int n); void main() { /* http://nataliya.kiev.ua */ clrscr(); int **a,*b; int n; puts("Enter n:"); scanf("%d",&n); a=(int**)calloc(n,sizeof(int*)); b=(int*)calloc(n,sizeof(int)); if(a==NULL||b==NULL){puts("no memory");exit(1);} inputvector(b,n); zmeyka(b,*a,n); outputmatrix(*a,n); free(a); free(b); getch(); } void inputvector(int *m,int n) { for(int i=0;i<n;i++) {printf("b%d=",i+1); scanf("%d",m+i); } } void outputmatrix(int *k ,int n) { int i,j; for (i=0;i<n;i++) {for (j=0;j<n;j++) printf("%6.d",*(k+n*i+j)); printf("\n");} } void zmeyka(int *b,int *a,int n) { for (int i=0;i<n;i++) for (int j=0;j<n;j++) if (i%2!=0) *(a+i*n+j)=int(pow(*(b+j),i+1)); else *(a+i*n+j)=int(pow(*(b+n-j-1),i+1)); }

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

1) Enter n: 5 b1=1 b2=2 b3=3 b4=4 b5=5 5 4 3 2 1 1 4 9 16 25 125 64 27 8 1 1 16 81 256 625 3125 1024 243 32 1 2) Enter n: 4 b1=1 b2=5 b3=3 b4=8 8 3 5 1 1 25 9 64 512 27 125 1 1 625 81 4096

Теорія до програми

Масив - це набір об'єктів однакового типу, розташованих один за одним у пам'яті комп'ютера. Масив можна описати наступним чином: тип_даних ім'я масиву [розмір_масиву] Кожний масив має им'я. Значення індексу повинні знаходитись у диапазоні від нуля до величини, що на одиницю менше розміру масиву, вказаного під час його опису. Тип_даних задає тип елементів масиву. Розмір_масиву - константа чи константний вираз, що задає кількість елементів масиву. Ім'я масиву є вказівником-константою, що дорівнює адресі початку масива (першого байта першого елемента масива). Доступ до окремих елементів масива може здійснюватись або за допомогою імені масива та індексу (порядковому номеру) або за вказівником (операція *). Іншими словами, наступні посилання будуть повністю еквівалентними: array[i] *(array+i) Кожний раз, коли при виконанні програми у виразі зв'являється ідентифікатор типу масиву, він перетворюється у вказівник на перший елемент масиву.