Мне нужно написать функцию, которая принимает в качестве параметров указатель void (представляющий массив) и целое число, которое представляет длину массива. В функции мне нужно привести этот пустой указатель в двойной. Проблема в том, что указатель void может представлять массив целых чисел, или чисел с плавающей запятой, или двойных.
Таким образом, следующее явно не работает, если указатель void представляет массив целых чисел или чисел с плавающей точкой:
void foo(void *v,int n){
double *values;
values=(double*)v;
for(i=0;i<n;i++)
printf("%f\n",values[i]);
}
, поэтому вы получите правильный вывод:
foo((double[]){1,2,3,4},4);
и это выведет неверный вывод:
foo((int[]){1,2,3,4},4);
foo((float[]){1,2,3,4},4);
Итак ... могу ли я правильно привести указатель void к двойному, только зная, что это может быть массив целых чисел, чисел с плавающей запятой или двойных чисел? И нужно ли иметь длину массива или я могу как-то рассчитать?
Постскриптум без использования обратных вызовов