КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Змінні вказівники
Адреси і вказівники Лекція 28-29. Програмування на мові С++. Вказівники Вказівники є надзвичайно істотною і характерною особливістю С++. От найчастіші приклади їх використання: · доступ до елементів масиву · передача аргументів в функцію, від якої вимагається змінити ці аргументи · передача в функцію масивів та рядкових змінних · виділення пам’яті · створення складних структур таких як зв’язний список.
Ідея вказівників нескладна. Почнемо з того, що кожен байт пам’яті компютера має адресу. Заванатжуючись в пам’ять, наша програма займає якусь кількість цих адрес. Це означає, що кожна змінна і кожна функція нашої програми починається з конкретної адреси.
Операція одержання адреси & Ми можемо одержати адресу змінної, використовуючи операцію одержання адреси &. Розглянемо невеличку програму, що показує, як це робити:
#include <iostream> using namespace std;
int main() {int var=11; int var2=22; int var3=33;
cout<<&var1<<endl <<&var2<<endl <<&var3<<endl; return 0; } В цій програмі визначено 3 цілочисельні змінні, які ініціалізовані значеннями 11, 22 і 33. Ми виводимо на екран адреси цих змінних. Реальні адреси, зайняті змінними в програмі, залежать від багатьох факторів таких як компютер, на якому запущена програма, розмір оперативної пам’яті, наявність іншої програми в пам’яті. Тому при різних запусках цієї програми ми, найшвидше, одержимо різні результати. Використання операції << дозволяє показати адреси в 16-ій системі. Адреси розміщені в спадаючому порядку, оскільки локальні змінні зберігаються в стеку, де їх адреси розміщені за спаданням. Якщо ж використовуються глобальні змінні, то їх адреси розміщуються в порядку зростання, оскільки глобальні змінні зберігаються в купі.
Адресний простір обмежений. Можливість довідатися, де розміщена певна змінна, корисна, але бачити саме значення адреси потрібно рідко. Потенційне збільшення наших можливостей в програмуванні вимагає реалізації такої ідеї: нам необхідні змінні, що зберігають значення адреси. Нам знайомі змінні, що зберігають знаки, числа з плаваючою крапкою, цілі та інші. Адреси зберігаються так само. Змінна, що містить значення адреси, називається змінною-вказівником або просто вказівником. Змінна-вказівник не належить до того ж типу, що й змінна, адресу якої вона зберігає: вказівник на int не має типу int. Так само, в С++ не існує типу pointer. Все виглядає дещо складніше, як показано в наступній програмі:
#include<iostream> using namespace std; int main() { int var1=11; int var2=22; cout<<&var1<<endl <<&var2<<endl;
int* ptr; //вказівник на ціле число ptr=&var1; cout<<ptr<<endl;
ptr=&var2; cout<<ptr<<endl;
return 0; } В рядку int* ptr; //вказівник на ціле число визначена змінна-вказівник. Зірочка означає вказівник на. Тобто, змінна визначена як вказівник на int, тобто ця змінна може містити в собі адресу змінної цілого типу. Синтаксис С++ дає змогу визначати вказівники наступним чином: char* cptr; //вказівник на символьну змінну int* iptr; //вказівник на ціле float* fptr; //вказівник на дійсний тип
Дата добавления: 2014-01-07; Просмотров: 427; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |