As direct conversion to void ** of other types is not valid is this conversion valid in C?
void swapValues(void **av, void **bv, size_t size)  
{  
    int *a = *av;
    int *b = *bv;
    char array[size];  
    memcpy(array, a, size);  
    memcpy(a, b, size);  
    memcpy(b, array, size);  
}  
int main()  
{  
    int i = 3;  
    int j = 5;  
    int *x = &i;
    int *y = &j;
    void *p = &i;  
    void *q = &j;  
    //this is invalid
    swapValues(&x, &y, sizeof(i));  
    //is this valid
    swapValues(&p, &q, sizeof(i));  
}