Вы неправильно поняли причину , в которой используются указатели. Поскольку C позволяет возвращать только один элемент из функции, в упражнении вместо этого используются указатели для установки значений внутри функции.
Это означает, что вы не должны объявлять указатели в main
. Вместо этого вы должны объявить int
s и передать результат применения оператора address-of &
к ним:
int mostnum, maxcount;
analyzeFrequencies(sequence, &mostnum, &maxcount, length);
Внутри analyzeFrequencies
вы сохраняете указатели и назначаете так:
if(count>=*maxcount)
{
*maxcount = count;
*mostnum = sequence[i];
}
Теперь значения, которые вы назначаете внутри функции, выполняются для локальных переменных, которые вы объявили в main
, потому что вы передали их по указателю.
Поскольку вы прочитали *maxcount
внутри analyzeFrequencies
перед его назначением, вы должны добавить назначение перед входом в цикл, например:
int i=0, j=0, count=0;
*maxcount = 0; // <<== Add this line
for(i=0;i < length;i++)
Примечание: У вас есть другие ошибки в коде, не связанные с передачей указателей. Например, когда вы печатаете «Неверный ввод, попробуйте еще раз», вы должны отрегулировать i
для повторного обращения к той же позиции, в противном случае неправильный вывод останется в последовательности.