Ще один приклад з помилкою:
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);// правильно!