Генерички показивачи¶
До сада смо разматрали показиваче на податке познатих типова. Осим њих постоје и генерички показивачи код којих није дефинисан тип показиваних података. Код њих се уместо типа показиваних података ставља службена реч void
.
С обзиром на то да није одређен тип података на који генерички показивач указује, њима се не може приступити. Да би ово било могуће, неопходно је генерички показивач конверзијом претворити у показивач на познати тип податка.
Погледајмо следећи пример:
#include<stdio.h>
main()
{
int a = 8;
void *pa;
pa = &a;
*pa = 23;
printf("a = %d", a);
}
После ове наредбе ће програм јавити грешку. Зашто? Из разлога што је pа
генерички показивач, а помоћу њега желимо да приступимо целобројној променљивој.
Овај проблем ћемо решити употребом оператора за конверзију *(int*)pa = 23
#include<stdio.h>
main()
{
int a = 8;
void* pa;
pa = &a;
*(int*)pa = 23;
printf("a = %d", a);
}
Заправо, овде смо кастовањем генерички показивач претворили у показивач на тип податка типа int
.
Покушај да анализираш следећи код:
float a = 8.50, b = 5.20;
float *pa;
void *pb;
pa = &a;
pb = pa;
*pb = 11.45;
Које ће вредности на излазу имати променљиве a и b?
а = 8.50, b = 5.20
а = 11.45, b = 5.20
а = 11.45, b = 11.45
Програм неће приказати вредности, пријавиће грешку.
Програм ће пријавити грешку, јер је *pb
генерички показивач. Грешка
се отклања заменом наредбе *pb = 11.45
са *(float*)pb = 11.45
. Вредности
променљивих су a = 11.45, b = 5.20.