Существует причина, по которой компилятор не может автоматически приводить значения от mystruct**
до void**
.
Рассмотрим следующий код:
void stupid(struct mystruct **a, struct myotherstruct **b)
{
void **x = (void **)a;
*x = *b;
}
Компилятор не будет жаловаться на неявное приведение от myotherstruct*
до void*
в строке *x = *b
, хотя эта строка пытается поместить указатель на myotherstruct
в месте, где указатели mystruct
надо поставить.
Ошибка на самом деле в предыдущей строке, которая преобразует «указатель на место, где указатели на mystruct
можно поместить« на »указатель на место, где указатели на могут быть положенным ". Это является причиной, по которой нет неявного приведения. Конечно, когда вы используете явное приведение, компилятор предполагает, что вы знаете, что делаете.