Покажчики у мові С

Содержание

Слайд 2

Згадаємо теорію… Будь-яке значення змінної зберігається у пам’яті. Змінна – це

Згадаємо теорію…

Будь-яке значення змінної зберігається у пам’яті.

Змінна – це область пам’яті,

яка має ім’я і в якій зберігається значення певного типу даних
Слайд 3

Пам’ять під глобальні змінні виділяється при запуску функції main і звільняється

Пам’ять під глобальні змінні виділяється при запуску функції main і звільняється

при завершенні функції main.

Пам’ять під локальні змінні виділяється при запуску функції і звільняється при завершенні функції.

Виділення пам’яті під змінну – це закріплення за змінною конкретних комірок пам’яті.

Слайд 4

Для того, щоб створити змінну, її потрібно оголосити, вказавши тип даних:

Для того, щоб створити змінну, її потрібно оголосити, вказавши тип даних:

тип

даних

ім’я змінної

;

Приклад:
short x;
double y;
int z;

x

y

z

Тип даних визначає скільки байтів пам’яті буде виділено під змінну.

Слайд 5

x y z Кожна комірка у пам’яті має унікальний номер. Номер

x

y

z

Кожна комірка у пам’яті має унікальний номер.

Номер комірки пам’яті, де зберігається

значення змінної називають адресою змінної.

Якщо змінна займає кілька байтів, то адреса вказує на першу (початкову) комірку.

Слайд 6

Така змінна називається покажчиком. У мові С є можливість оголосити змінну,

Така змінна називається покажчиком.

У мові С є можливість оголосити змінну, яка

міститиме номер комірки пам’яті, де зберігатиметься значення певного типу.

Покажчик – це змінна, значенням якої є адреса пам’яті, де зберігається значення певного типу.

short x;

short *y;

2

Слайд 7

Щоб оголосити змінну типу покажчика на деякий тип даних, потрібно перед

Щоб оголосити змінну типу покажчика на деякий тип даних, потрібно перед

іменем змінної поставити зірочку:

тип даних

ім’я змінної

;

Приклад:
short *x;
double *y;
int *z;

Змінна-покажчик у пам’яті займає 4 байти, незалежно від того, на значення якого типу вона вказує.

*

short x;

short *y;

2

Слайд 8

В одному оголошенні можна вказувати звичайні змінні та змінні-покажчики: short x,

В одному оголошенні можна вказувати звичайні змінні та змінні-покажчики:

short x, *px,

y, *py;
double d, a, b = 0, *pd, *bp;

При запуску функції операційна система визначає вільні ділянки пам’яті і розміщує в них оголошені у функції змінні.

Слайд 9

Тому при кожному виклику функції одна й та сама змінна може

Тому при кожному виклику функції одна й та сама змінна може

розміщуватися у різних комірках пам’яті.
Причина: при виході з функції усі локальні змінні видаляються, пам’ять очищується. При наступному виклику функції під локальні змінні знову виділяється пам’ять.
Слайд 10

Для визначення адреси змінної у пам’яті застосовується операція «взяття адреси» &:

Для визначення адреси змінної у пам’яті застосовується операція «взяття адреси» &:

ім’я

змінної

&

int x = 10;
int *px = &x;

double y = 10;
double *py = &x;

Помилка невідповідності типів. Неможливо записати у py адресу змінної типу int

Слайд 11

Особливості функції scanf 1) після рядку формату вказуються адреси змінних, в

Особливості функції scanf

1) після рядку формату вказуються адреси змінних, в які

записуються прочитані з клавіатури значення:

scanf("%d %d %lf %ld", &a, &b, &c, &d);

Слайд 12

2) читання кількох значень: int a, b; double c; long d;

2) читання кількох значень:

int a, b;
double c;
long d;
scanf("%d %d %lf %ld",

&a, &b, &c, &d);
Слайд 13

3) у рядку формату між специфікаторами форматування можна вказувати роздільники: int

3) у рядку формату між специфікаторами форматування можна вказувати роздільники:

int a,

b;
double c;
long d;
scanf("%d, %d, %lf, %ld",
&a, &b, &c, &d);
Слайд 14

4) якщо значення, що вводилося не відповідало формату, то у змінну

4) якщо значення, що вводилося не відповідало формату, то у змінну

нічого не записується:

int x = 10;
scanf("%d", &x);
printf("x = %d\n", x);

Слайд 15

Якщо значення змінної некоректно введене, то усі інші змінні прочитані не

Якщо значення змінної некоректно введене, то усі інші змінні прочитані не

будуть:

int a, b, c, d;
int count = scanf("%d %d %d %d", &a,
&b, &c, &d);
printf("Coorect values: %d\n", count);