#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, будут происходить в локальном фрейме стека этой подпрограммы.