Кто-нибудь может объяснить мне, как я 5, как переменные работают на функцию? - PullRequest
0 голосов
/ 05 марта 2020

Итак, за последние 4 месяца я изучал C ++ и добился большого прогресса, фактически очень скоро приблизившись к изучению графиков. Есть только одна вещь, с которой у меня все еще есть проблемы, и я просто ее не получаю, и это переменные в функции.

По сути, я не знаю, какие переменные помещать в () функция в начале, и какие переменные мне нужно поставить после.

Я знаю, что это зависит от упражнения, поэтому я попытаюсь привести пример.

, поэтому я хочу вычислить сумма a и b в функции.

int calculateSum(int a, int b){
    int sum;
}

, так почему я помещаю ее в функцию, а не в скобки? почему не может быть просто:

int calculateSum(int a, int b, int sum){
    //code
}

Ответы [ 3 ]

2 голосов
/ 05 марта 2020

Переменные внутри () являются параметрами вашей функции. То есть, входы, которые он ожидает, когда он вызывается из другого кода. Переменные внутри {} предназначены исключительно для использования внутри вашей функции.

Ваш первый пример имеет смысл - вы бы использовали его примерно так:

int answer = calculateSum(1, 2);

Что бы вы передали в качестве аргумента для параметра sum во втором примере? Это своего рода бессмысленный запрос - вызывающая сторона вашей функции хочет получить сумму обратно из вашей процедуры.

0 голосов
/ 05 марта 2020

Когда вы пишете функцию, вам нужно разделить свой ум на две разные личности. У вас есть разработчик, который пишет функцию, мы будем называть их FuncDev, а у вас есть разработчик, который будет вызывать эту функцию, мы будем называть их CallDev.

Когда FuncDev пишет функцию, им нужно подумать о том, для чего CallDev нужна функция и в каких ситуациях она будет вызывать ее. Какую информацию имеет CallDev, когда они вызывают функцию? Что они хотят, чтобы функция на самом деле делала или возвращала?

В случае calculateSum у CallDev будет два числа, по которым они хотят найти сумму. И FuncDev нужно только два числа, чтобы правильно рассчитать сумму. Итак, все согласны: чтобы позвонить calculateSum, вы должны предоставить два числа и вернуть номер (это сумма этих двух).

Вся эта информация может быть найдена в заголовке функции:

//- This function will return (or give back) an integer
//|                   - This function requires two integers to do its job
//v                   v
int calculateSum(int a, int b) {

Вам не нужно также включать параметр int sum, потому что A. это не то, что CallDev будет иметь во время вызова функции. Весь смысл в том, что они звонят, чтобы получить сумму в первую очередь! И B. Это не то, что FuncDev нужно для расчета суммы. Таким образом, вы будете налагать дополнительное условие на любого, кто вызывает функцию, не получая ничего в реализации функции.

Кроме того, все, что происходит внутри фигурных скобок в самой функции logi c, CallDev никогда не понадобится знать о. Решение о том, решит ли FuncDev создать int sum переменную для хранения суммы, прежде чем они ее вернут, и т. Д. c ... не должно иметь значения.

Обычно, когда я занимаюсь разработкой, я делаю вызовы функций, прежде чем я даже написать функции. Так что в вашем случае я могу пойти дальше и подумать: «Хм, мне действительно нужна сумма из двух чисел. У меня есть два числа заранее, было бы неплохо, если бы я просто позвонил calculateSum(num1, num2) и получил нужное мне значение. «. Поэтому я просто напишу вызов функции и продолжу: 1 .


1. В действительности это выглядит как написание тестов, когда это применимо для функции, и , а затем ее написание. Но предпосылка та же. Я определяю поведение, входы и выходы функции перед тем, как ее написать.

0 голосов
/ 05 марта 2020

На самом деле все зависит от определения функции. Например, мы можем определить функцию следующим образом. int CalculateSum (int a, int b, int sum);

Эта функция обязательно получает три целых числа a, b и сумму. Тело функции может быть определено, например, следующим образом:

int CalculateSum (int a, int b, int sum) {
sum = a + b;
return sum;
}

Мы также можем определить функцию.

int CalculateSum (int a, int b); Эта функция получает два целых числа a и b.

тело функции может быть

int CalculateSum (int a, int b) {
int sum;
sum = a + b;
return sum;
}

Если вы являетесь создателем функции, вы можете сделать это как хотите, но если функция уже определена, вам придется использовать ее в начале определения.

...