Застосування покажчиків в C + + h2>
Напишемо наступну програму, яка використовує
покажчики. Припустимо, що значення iNum1 дорівнює 2, а адреса iNum1 - 1000. INum1
займатиме байти з адресами 1000, 1001, 1002 і 1003. Якщо значення iNum2
було рівне, то змінна iNum2 могла б займати осередку з адресами 1004, 1005,
1006 і 1007. Отже, iNumI починається з адреси 1000, а iNum2 починається
з адреси 1004. Однак, хоча iNumI займає чотири адреси, в С/С + + адресою iNumI
називається адреса 1000, а адресою iNum2 називається адреса 1004. Тепер оголосимо
дві змінні як покажчики - pNum1 і pNum2. Ваша мета полягає в тому, щоб
зберегти число 1000 (адреса iNumI) в pNum1 і число 1004 (адреса iNum2) в pNum2. p>
Внесіть наступні зміни до main (void): p>
void main (void) p>
( p>
int iNum1; p>
int iNum2; p>
int iResult; p>
int * pNum1; p>
int * pNum2; p>
iNum1 = 2; p>
iNum2 = 3; p>
pNum1 = &iNum1; p>
pNum2 = &iNum2; p>
iResult = * pNum1 +
* pNum2; p>
cout <<
"The result is:"; p>
cout <<
iResult <
) p>
Код, який ви ввели, оголошує три цілих змінних: p>
int iNum1; p>
int iNum2; p>
int iResult; p>
Потім оголошуються ще дві змінні: p>
int * pNum1; p>
int * pNum2; p>
Зверніть увагу, що в оголошенні використана
запис int *. До якого ж типу відноситься мінлива pNum1? Чи можете ви
зберегти ціле значення в pNum1? Ні. У pNum1 ви можете зберегти адреса
змінної типу int. Ви повинні зберегти у змінній pNum1 число 1000,
оскільки 1000 є адресою iNum1. Точно так само ви повинні зберігати адреса
цілого значення і в змінної pNum2. Після цього ви привласнюєте значення
змінним iNum1 і iNum2: p>
iNum1 = 2; p>
iNum2 = 2; p>
Потім ви привласнюєте значення змінним pNumI і
pNum2: p>
pNum1 = &iNum1; p>
pNum2 = &iNum2; p>
Ці два оператори зберігають адреса змінної iNum1 в
pNum1 та адресу iNum2 в pNum2. Далі вам потрібно обчислити результат складання iNum1
з iNum2. Ви могли б б просто написати оператор p>
iResult = iNum1 + iNum2; p>
Однак спробуємо виконати обчислення, застосувавши
покажчики, а не змінні. Наприклад, щоб обчислити результат складання iNuml
і iNum2, ви пишете наступний оператор: p>
iResult = * pNum1 + * pNum2; p>
Коли ви використовуєте покажчик з попереднім
символом *, ви виймайте значення, що зберігається за цією адресою. * pNum1 - це
те ж, що і * 1000, так що програма звертається до значення, що зберігається по
адресою 1000. Оскільки мінлива pNum1 була оголошена як int * (а компілятор
знає, що ціле значення займає чотири байти пам'яті), програма звертається до
адресами 1000, 1001, 1002 і 1003. Вона знаходить за цими адресами значення 2, так
як * pNum1 одно 2. Аналогічно, * pNum2 одно 3, оскільки pNum2 одно 1004, а
комірки пам'яті 1004, 1005, 1006 і 1007 містять ціле зі значенням. І, нарешті,
виконується оператор cout, який виводить на екран значення змінної iResult: p>
cout <<
"The result is:" <
cout <
Збережіть свою роботу, виконайте компіляцію і
компонування програми. Запустіть програму і переконайтеся, що значення iResult
одно 5 (2 +3 = 5). p>
Список літератури h2>
Для підготовки даної роботи були використані
матеріали з сайту http://www.realcoding.net
p>