сраные указатели

вот допустим у меня есть массив чаров
unsigned char fill_0[]={0xe2,0x96,0x88};делаю указатель
void *fi;
fi = fill_4;который типа указывает на этот массив или как там

почему теперь когда я засовываю в функцию sizeof() вот так
sizeof(fill_0)она работает правильно
а вот так
sizeof(fi)не работает правильно

причем например функция fwrite() таким макаром работает как надо
... и добавил:етить я думал в массиве автоматом ставится последний символ нулевой

попутал со строкой в кавычках
... и добавил:блин хотя сайзоф же не по нулю определяет конец массива

как оно работает ваще хз

придется свою функцию сделать
... и добавил:короче суть в том, что есть типа массивы чаров, отвечающие за символы ютф-8 - один символ три чара (но в принципе может быть и не три чара, в том и проблема),
затем есть типа массив то-ли указателей то-ли адресов то-ли указателей на адреса хз,
потом функция, которая берет чисто цифру (ну и указатель на файл) и по этой цифре кладет в файл символ ютф-8.
unsigned char fill_3[]={0xe2,0x96,0x91};
unsigned char fill_2[]={0xe2,0x96,0x92};
unsigned char fill_1[]={0xe2,0x96,0x93};
unsigned char fill_0[]={0xe2,0x96,0x88};
void* FillArr[]={
&fill_0,
&fill_1,
&fill_2,
&fill_3,
};
void putfill(int num, void* pt){
void*fil = FillArr[num];
fwrite(fil, 3, 1, pt);
}делается это функцией fwrite(fil, 3, 1, pt); где fil это указатель на то что писать, 3 это размер того что писать, 1 это количество записываний и пт указатель на файл. и это как ни странно работает
Но надо чтобы размер записываемого определялся сам собой, а не цифрой 3, но sizeof() с этим указателем fil почему-то не пашет
