C разъяснение термина «возврат»

#c #return

#c #Возврат

Вопрос:

Домашнее задание, просто посоветуйте, пожалуйста

По-видимому, мое представление о том, что делает возврат чего-либо в методе, неверно. Я пытаюсь написать методы для получения производных чисел и операций. До сих пор я просто хотел получить производную от неотрицательного числа, которое не сопровождается символом «x» (результат должен быть равен нулю независимо от того, какое значение задано).

Код довольно длинный и нуждается в очистке, поэтому я просто включу метод, вызов и то, что я получаю.

Метод:

 int noXDerivative(int tempInt, string tempX)
{
    if (tempX == "")
    {
        tempInt = 0;
    }
    return tempInt;
}

void getDerivatives(int tempInt, string tempX, int tempInt2, string tempX2, char tempOperator)
{
    noXDerivative(tempInt, tempX);
    noXDerivative(tempInt2, tempX2);
}
  

Вызов:

 getDerivatives(tempNumInt, tempNumX, tempNum2Int, tempNum2X, expression[iterator]);
  

Я также вызвал «noXDerivative» напрямую, чтобы посмотреть, что произойдет, но результат не изменился. Тест, который я запускаю прямо сейчас, равен «5 6» (tempNumInt равно 5, а tempNum2Int равно 6). Я продолжаю получать 11, когда мне нужно получить 0 (опять же, нет никаких «x»). Я надеялся, что если я введу tempNumInt в качестве одного из параметров, он будет изменен с 5 на 0 в noXDerivative методе, но это не так. Как мне это исправить?

Комментарии:

1. Подумайте о том, чтобы сначала прочитать базовую книгу по C . Мне кажется, что вы тратите свое время на кодирование сложных вещей на языке, который вы еще не понимаете.

2. подсказка: вы передаете tempInt по значению, если вы измените его в noXDerivative, изменение не будет передано обратно вызывающей стороне.

3. Откуда вы знаете, что вы «получаете»?

4. @Alexandre Спасибо за ваше предложение. На самом деле я сделал это, когда изучал C #, это заняло у меня некоторое время, и к тому времени, когда я начал кодировать, я обнаружил, что узнал больше, задавая вопросы сообществу, чем читая книгу. Я думаю, это просто то, как я учусь, но я ценю ваш комментарий, и я согласен, что лучший способ начать — это читать книги.

5. Многомерное исчисление над целыми числами?

Ответ №1:

Я должен сказать, что я не понимаю, что именно вы пытаетесь сделать.

Тем не менее, для достижения вашей цели изменения tempInt внутри getDerivatives() вы можете либо сделать:

 tempInt = noXDerivative(tempInt, tempX);
  

Или вы можете изменить noXDerivative() функцию, чтобы она принимала свой аргумент по ссылке, а не по значению:

 int noXDerivative(int amp;tempInt, string tempX)
{
    ...
}
  

Комментарии:

1. @Jesse: Я рад, что это помогло. Однако, если у вас возникли проблемы с пониманием того, как возвращать значения из функций, я предлагаю вам воспользоваться советом @Alexandre C, приведенным выше, и найти хорошую книгу для начинающих по C , чтобы изучить основы.

2. Ого, извините, что мой комментарий был удален, я читал все остальное и не увидел его здесь, я, вероятно, случайно нажал на «x» или что-то в этом роде. Еще раз спасибо

Ответ №2:

return делает именно это — он возвращает значение. Это не изменяет переданное значение. Если я правильно понимаю ваш код, держу пари, что если бы у вас было что-то вроде

int result1 = noXDerivative(tempInt, tempX)

результат 1 будет содержать значение 0. Имейте в виду, что tempInt и tempInt2 в getDerivatives тогда не будут изменены, поэтому вам нужно будет разобраться с этим…

Ответ №3:

ну, не так много, чтобы «советовать». Проблема здесь в том, что когда подпрограмма returns принимает значение, вызов должен использоваться как значение левой стороны.

 tempInt = noXDerivative(tempInt, tempX);
  

В противном случае вы не будете изменять значение tempInt, по крайней мере, с текущей подписью вашей подпрограммы. Вы передаете tempInt в качестве аргумента по значению с этим вызовом, и любые изменения, которые вы выполняете для tempInt, будут происходить в локальном фрейме стека этой подпрограммы.