У меня есть функция в C, которая должна получать указатель на массив (с неопределенным типом).Void ** как параметр требует лить
Для этого я использую void **, так как я бы использовал void * для получения массива неуказанных элементов.
К сожалению, проблема связана с компилятором (передается аргумент 1 из 'f' из несовместимого типа указателя). Если я игнорирую предупреждение и пытаюсь выполнить программу, все работает так, как ожидалось.
Единственный способ избавиться от предупреждения - это бросить все, что я пытаюсь передать функции void **.
Почему C ведет себя так? И есть ли лучший способ решить предупреждение?
PS: Мне нужно скомпилировать с помощью GCC с флагами -std = gnu89 -pedantic -Wall
Пример
int f(void** param){ return 1; }
int main(){
int *arr = malloc(sizeof(int) * 20);
int i;
for(i=0; i < 20; i++) arr[i] = i;
f(&arr);
}
'int f (void ** param) {return 1; } '->' int f (void * param) {return 1; } ', не используйте' ** ', вы можете прочитать указатель на массив, используя один указатель (' void * ') –
@AlterMann Как мне изменить значение распределения для' arr'? –
@SouravGhosh Это именно то, что я должен выполнить. – Spotlight