#c #function #static
#c #функция #статический
Вопрос:
Как это работает
функция main вызовет Square() со значением int, где оно будет умножено на себя и возвращено в main . Однако, если параметры не указаны, то предыдущее значение int будет увеличено и использовано. Если указано значение 5, затем возвращаю 25, тогда я не добавляю параметр и снова вызываю функцию, она вернет квадрат 5 1, поэтому я получу 36, затем, если следующий вызов не имеет параметра, я получу квадрат 7, который равен 49.
Проблема
Здесь я объявил static int lastN, чтобы принимать значение n первого вызова. Если в следующем вызове нет параметров, переданных в square() , тогда unsigned int n будет равно -1, а lastN , в которых хранится предыдущее значение параметра n (в данном случае 5), затем lastN будет автоматически увеличен, и квадрат lastN будет возвращен. Однако, похоже, что статическая переменная не работает, я продолжаю получать 1 без параметров, я не очень уверен, как получить предыдущее значение со статической переменной.
#include <iostream>
using namespace std;
int square(unsigned int n=-1)
{
static int lastN;
if(n==-1)
{
lastN =1;
return (lastN)*(lastN);
}
lastN=n;
return n*n;
}
void main () {
cout <<"Value: "<< square(5) << endl;
}
Спасибо за ответы. Хорошо, чтобы прояснить ситуацию, мой инструктор сказал мне использовать -1 для значения по умолчанию, чтобы, если в функцию не были переданы никакие параметры, тогда значение по умолчанию определенно не будет unsigned int . Если нет, если я использую положительное значение, например 10, в качестве значения по умолчанию, тогда возникают проблемы, когда мой инструктор передает 10 в качестве параметра для тестирования кода. Если я введу 5, lastN будет равно 5, а возвращенный квадрат 25, то для следующего вызова я не буду вводить какие-либо параметры в вызов функции для int square(),
void main () {
cout <<"Value: "<< square() << endl; //no parameter
}
вместо того, чтобы увеличивать предыдущее значение до 6 и возвращать квадрат 6, я получаю
Значение: 1
Нажмите любую клавишу, чтобы продолжить…
Я начинаю с c , поэтому я не очень уверен в использовании статических переменных или любых других типов, таких как передача переменной в функцию по значению или ссылке
Комментарии:
1. Это не компилируется из-за вашего
void main
, что должно бытьint main
. Однако, даже если это исправлено иsquare()
вызвано впоследствии, все работает нормально. Какой компилятор вы используете, как вы его вызываете и каков на самом деле код, который предположительно работает не так, как ожидалось?2. Кажется, работает так, как ожидалось: ideone.com/R7bvYI
3. «Я продолжаю получать 1 без параметров» Я подозреваю, что это крайний случай… вы пробовали сначала вызвать его с помощью чего-нибудь?
4. Вы должны инициализировать переменную lstN в первый раз: static int lastN = 0;
5. ваш код работает… пожалуйста, покажите какой-нибудь фрагмент кода о том, как вы вызываете функцию и какой компилятор вы используете?