*p = (rand( )%100 - 50);
for (int i = 1; i < k; i++) {
*(p + 1) = -i * * (p + i - 1);
}
Можете вообще объяснить, что этот код делает? Зачем он это делает? Что вы хотели, чтобы он делал?
Помимо этого, вместо
*(p+X)
можно писать
p[X]
. Так понятнее. У вас тут явно не к месту арифметика указателей приплетена.
А так, код работает так, как написан. Первое число в массиве заполняется случайным от -50 до 49, второе число много раз переписывается чем-то умноженным на какое-то другое число массива, остальные числа не заполняются вообще.
Поскольку массив у вас локальный, то он нулями не инициализируется. Поэтому там изначально случайный мусор. Поэтому все, кроме первого элемента так и будет случайным мусором.