В строке
priorities[currIdx] = (int) rand() % 10;
вы пытаетесь присвоить int
на правой стороне (rhs) =
чему-то, что имеет тип int*
налевая сторона (лс).Lhs - это переменная, которая содержит указатель на место хранения, где вы можете хранить int
.Итак, чтобы записать в это место, вы должны сначала разыменовать переменную указателя с помощью *priorities[currIdx]
.Это говорит компилятору: «Не пишите в саму переменную, а ищите место, куда она указывает, и пишите туда».
Это похоже на то, что вы делаете, когда вначале говорите priorities[currIdx]
,Переменная priorities
является int**
.Это указатель на указатель на int
.Вы не хотите переопределять саму переменную, но хотите записать местоположение, на которое она указывает (имеет тип int*
), со свежим указателем.В этом случае вы разыменовываете высказывание priorities[currIdx]
, что эквивалентно *(priorities + currIdx)
.
Однако выделение дополнительного int
для каждого слота массива не только неоправданно и громоздко, но и делаетВаш код намного медленнее.Вы можете получить массив int
s напрямую, просто передав int* priorities
. Затем вы можете просто удалить строку malloc
и записать в массив, как вы делали в своем вопросе изначально.То есть без разыменования:
priorities[currIdx] = (int) rand() % 10;
, поскольку priorities[currIdx]
будет иметь тип int
.