У меня есть вопрос, касающийся void*
и void**
, и я знаю, что это своего рода старый вопрос, который был задан (несколько) раньше в stackoverflow.Таким образом, вопрос заключается в следующем:
Когда я компилирую этот код с помощью gcc 4.4.3 под Ubuntu 10.10, я получаю следующее предупреждение:
zz.c: In function ‘main’:
zz.c:21: warning: passing argument 1 of ‘bar’ from incompatible pointer type
zz.c:9: note: expected ‘void **’ but argument is of type ‘float **’
почему это нормально для передачипеременная x в качестве аргумента функции foo (), но нельзя передавать переменную y в качестве аргумента функции bar ().Я могу исправить это, явно приведя обе переменные к void*
и void**
, как и ожидалось.
void foo (void* a){
}
void bar(void **a){
*a = (float *) malloc(100*sizeof(float));
}
int main (){
float *x = (float*) malloc(100*sizeof(float));
foo(x);
free(x);
float *y;
bar(&y);
free(y);
return 0;
}