русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Write of address 0x0


Дата додавання: 2014-11-28; переглядів: 787.


Ще один приклад з помилкою:

char s = "Borland Builder 6.0";

s = "Intel";

Після виконання другого рядка область пам'яті, у якій зберігається рядок "Borland Builder 6.0" буде загублена назавжди, бо адреса цього рядка ніяким чином не зберігається.

 

Нагадаємо ще раз, що покажчик у більшості випадків є типізований. Тип значення покажчика при необхідності можна перетворити за допомогою унарної операції перетворення типу. Роль символу такої операції грає запис виду (тип*) , де тип - тип, до якого приводиться значення покажчика. Використання цієї операції вимагає деякої обережності. У більшості випадків, така операція використовується для перетворення типізованої адреси у не типізовану або навпаки.

При оголошенні не типізованого покажчика використовується службове слово void. Наприклад:

void* pv;

Не типізований покажчик не асоціюється з якимось певним типом. Значення такого покажчика є "чиста" адреса. Йому можна присвоїти адресу об'єкта будь-якого типу, причому присвоювання можна записувати без вказівки операції приведення типу, наприклад:

double x,y;

void* px = &x;

Однак при виконанні операції з певним об'єктом через не типізований покажчик операцію приведення типу необхідно записувати:

y = fabs(*pv);// помилка!

y = fabs(*(double*)pv);// правильно!

 


<== попередня лекція | наступна лекція ==>
Void main() | Посилання


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн