int *harePosition = 1;
создаст указатель и установит его в ячейке памяти 1 (a) .Это не то, что вам нужно.
На самом деле абсолютно нет необходимости использовать указатели в вашем коде, поскольку вы передаете значение и возвращаете новое значение (b) .Итак, в более простой форме вам понадобится:
int fn (int someVal) {
return someVal + 42;
}
int val = 7;
val = fn (val); // now it will be 49.
(a) По крайней мере, в системах, которые позволяют это.Я думаю, что это утверждение должно было генерировать, по крайней мере, какое-то диагностическое сообщение, поскольку, как указывает ISO C11 Simple assignment
в его ограничениях, вы должны назначать только совместимый указатель или нулевой указатель, не какое-то произвольное целое число.
(b) Как правило, единственной причиной для передачи указателя является эмуляция передачи по ссылке на языке, который его не имеет.Я искренне надеюсь в какой-то момент, что ISO просто кусает пулю и добавляет real передачу по ссылке на язык.Тогда около 80% проблем с C исчезнут: -)
Если вам действительно необходимо передать его по (эмулированной) ссылке, вы должны убедиться, что вы различаете указатель и значение , на которое он указывает.Например:
void fn (int *pSomeVal) { // Receive a POINTER to an int.
*pSomeVal += 42; // Update the thing it points TO.
}
int val = 7;
fn (&val); // Pass POINTER to the int,
// then val becomes 49.