1. void запросто можно использовать с указателями на массивы (и др.). А если точнее, то void* это указатель на "ничто"

поэтому тут уже нет разницы какой указатель (на строку, на функцию, на массив int и т.п.) вы приводите к типу void*
2.
2 jack_avenger
Чтоб ваш код откомпилился нужно написать так:
char cChar;
char xChar[10];
void *pVoid;
pVoid=&cChar;
*((char*)pVoid) = 1;
т.е., т.к void - это "ничто", то в этом "ничто" трудно выделить элемент, в который вы хотите затолкнуть 1, поэтому указатель на "ничто" нужно к чему-то привести (например к char), а потом уже в него записывать 1.
НО, как сказал
phantom - между указателем на массив char (строкой) и просто char (частный случай массива char размером = 1 элемент) разницы нет (и в том и в другом случае указатель - указывает на char) поэтому проще написать так:
char cChar;
char xChar[10];
char *pVoid;
pVoid=&cChar;
pVoid=xChar; //т.к массив char'ов это есть указатель на 0-й char.
*pVoid = 1;