Лабораторія 6

Покажчики дозволяють представляти складні типи даних (структури), змінювати значення, що надсилаються як параметри функції, працювати з динамічно виділеними областями пам'яті або ефективніше отримувати доступ до таблиць. Покажчик дає нам засоби для непрямого доступу до значення типу дати.

значення адреси

Покажчик насправді є значенням. Це значення адреси пам'яті, де є те, що нас насправді цікавить. Покажчики можуть бути типу поблизу (мають лише значення зміщення) або типу фар (вони також мають сегмент і зміщення).

оголошує ціле число і яке має значення 10, і цілочисельний покажчик, що викликається int_p. * передує визначенню змінної вказівника. Щоб встановити зв’язок між і і int_p & використовується префікс.

Це призначає значення адреси (адреса пам'яті) змінної і вказівник. Відтепер int_p міститиме адресу області пам'яті, де розміщено значення 10, значення змінної і.

ТОЧКИ МІСТЯТЬ АДРЕСИ ПАМ’ЯТІ !

Посилатися на його значення і ми будемо використовувати '*':

Ця операція призначає значення з адреси пам'яті, на яку вона вказує int_p змінної x.

Передача посиланням на параметри функції

Арифметичні дії на покажчиках дозволяється додавання/віднімання константи, збільшення/зменшення та віднімання двох покажчиків одного типу.

Додавання 1 змушує вказівник вказувати на наступний об’єкт того ж типу, а зменшення - на безпосередній попередній об’єкт у просторі пам’яті.

pi ++ - pi вказуватиме на наступне ціле число. Те, що насправді віднімається або додається, є розмір (тип).

Значимість покажчиків може бути змінена шляхом явного перетворення типу цнотливий.* ((Char *) pf) забезпечить перший байт представлення змінної типу плавати.

Покажчик 0 визначений як НУЛЬ і означає, що це нічого не вказує.

Оскільки порожнеча * означає вказівник невизначеного типу, ми не можемо виконувати арифметичні дії над цими вказівниками. Порожні покажчики дозволяють нам максимально підтримувати загальність програми.

зменшився з двох покажчиків дозволяється лише для покажчиків одного типу. p-q представляє кількість об'єктів між стор і q. Покажчики та картини

* стор вкаже на перший елемент масиву з.

Ось два способи обчислення довжини рядка:

Зауваження Остерігайтеся таких ініціалізацій, як:

Поки перша правильно ініціалізує змінну і, виділивши необхідний простір, друга інструкція виділить простір пам'яті для рядкової константи "abcd" і призначить адресу вказівнику. стор. Динамічне розподіл

ДИНАМІЧНЕ РОЗПОДІЛ ПАМ'ЯТІ (MALLOC, CALLOC, SIZEOF, БЕЗКОШТОВНО)
Динамічне розподіл рекомендується для резервування місця для змінних. Дуже важко заздалегідь знати, скільки даних буде обробляти програма. Статичне розподіл масиву призведе або до втраченого простору пам'яті оперативної пам'яті (досить дорогого місця) при виділенні кількості, що значно перевищує потреби, або до появи помилок, коли обсяг виділеної пам'яті значно нижче необхідних. Статичне розподіл здійснюється в області даних програми під час формування об'єктного образу програми.

Набагато краще виділити простір за необхідності (якщо можливо - обсяг необхідної пам'яті не повинен бути більшим, ніж доступний).

Мова C дозволяє програмістам динамічно розподіляти та звільняти області пам'яті під час роботи програми. Функцією, яка виділяє пам'ять для змінної, є мозоль (). Використання також потрібно sizeof () що визначає необхідну пам’ять. Безкоштовно () звільняє виділену пам’ять. Вказівники на функції

Можна вказати вказівник, який вказує на a функція. Оголошення такого вказівника виконується наступним чином:

Дужки навколо * func_p потрібні, інакше компілятор буде розуміти оголошення як оголошення функції, яке повертає покажчик на ціле число. Щоб призначити адресу функції покажчика, ми будемо діяти наступним чином:

де князь - це назва функції. Виклик функції здійснюється наступним чином (якщо у нас немає параметрів):

Якщо функція повертає значення, то маємо: Аргументи командного рядка

Можливо надсилати аргументи програмі на мові C, коли вони запускаються. Для цього призначені дужки, що слідують за основною функцією. argc містить кількість аргументів, отриманих знову argv [] це масив покажчиків, кожен з яких містить аргумент.

Зауважте, що * Argv [0] містить назву програми, що викликається, і* Argv [1] - вказівник на перший переданий аргумент і * Argv [n] вказує на останній аргумент. Якщо у нас немає аргументів, argc матиме значення 1, а для n аргументів argc буде дорівнює n + 1. Проблеми вирішені
Запропоновані питання