void *Addr = &SomePerem;
Может хранить адрес переменной любого типа. Сам int занимает 4 байта, char 1 байт. Поэтому придется делать функцию, в аргументах которой будешь передавать адрес двух объектов и указывать их размер, что-то вроде такого:
bool compare(void *First, void *Second, int size, int ssize)
{
if (size != ssize) return false;
for (int i = 0; i < size; i++)
if (*First[i] != *Second[i]) return false;
return true;
}
Вызов:
compare(MasOne, MasSec, sizeof(MasOne), sizeof(MasSec));
Сравнение двух массивов, или так:
compare(strucone, strucsec, sizeof(STRUCTYPE), sizeof(STRUCTYPE));
^Сравнение двух структур.
Или сравнение переменных:
compare(a, b, sizeof(int), sizeof(int));
Где переменные a и b типа int.
Могут быть ошибки при компиляции, компиль может запретить такое наглое сравнение, в таком случае придется извиваться и извращаться с указателями. Или написать функцию на ассемблере.
P.S. Можешь еще глянуть тип LPVOID, сам по себе он не указатель, а макрос.