Вы не можете использовать void*
в арифметике ... так что, в основном, когда вы говорите debut[k]
, это требует операции сложения со значением указателя, что вы не можете сделать ... вы будете иметьпреобразовать это значение указателя в другой тип указателя, прежде чем вы сможете добавить к нему.
Если честно, тип debut
должен быть на самом деле void**
, так как он указывает на массив A
, которыймассив указателей на указатели.Вы можете индексировать в этом.Поэтому измените ваше объявление следующим образом:
void ** debut = A;
Теперь оно может фактически добавить к debut
, поскольку оно знает, что значение, на которое оно указывает, является указателем и, следовательно, может быть увеличено на размеруказатель на вашей платформе.Вы по-прежнему не сможете совершать вызовы, например temp[k]
, поскольку теперь temp
относится к типу void*
, но по крайней мере debut[k]
будет действительным.
Это может быть лучше всего вконец, чтобы фактически сделать ваши массивы типа long
, или любого размера указателя на вашей платформе ... вы можете затем сделать арифметику указателей для этих типов и правильно сместить их в массивы.Значения будут одинаковыми, так как хранимые значения являются просто адресами, которые являются целочисленными значениями ... не похоже, что вы на самом деле делаете много различий, только проверки на равенство, чтобы это могло сработать.В противном случае вам нужно будет выполнить приведение к long
или какому-либо размеру указателя на вашей платформе, чтобы вы могли правильно выполнить индексацию, необходимую для смещения в ваших массивах.