Параметры

Последнее обновление: 17.08.2018
Вопрос 1

Какой результат работы будет у следующей программы и почему:

class Program
{
	static void Main(string[] args)
	{
		int x;
		Increment(ref x);
		Console.WriteLine(x);
		Console.ReadKey();
	}

	static void Increment(ref int x)
	{
		x++;
	}
}

Приведенная выше программа не скомпилируется, так как перед передачей переменной x типа int в качестве ref-аргумента ей должно быть присвоено начальное значение.

Вопрос 2

Какое число (или какие числа) выведет на консоль следующая программа и почему:

class Program
{
	static void Main(string[] args)
	{
		int i = 0;
		Console.Write(i++ + Calculate(i));
		Console.WriteLine(i);

		Console.ReadKey();
	}

	public static int Calculate(int i)
	{
		Console.Write(i++);
		return i;
	}
}

На консоль будет выведено число 121.

  1. Вначале выполняется инкремент переменной i (i++).

  2. Затем ее увеличенное значение (то есть число 1) передается в метод Calculate().

  3. Выполняется вызов метода Calculate(). В этом методе в вызове Console.Write(i++) переданное через параметр значение увеличивается на единицу, но так как это постфиксный инкремент, то возвращается число 1 и это же число выводится на консоль.

  4. Далее метод Calculate возвращает число 2.

  5. Выполнение возвращается к строке Console.Write(i++ + Calculate(i));. Итак, здесь выражение Calculate(i) возвращает 2. Но выражение i++, хотя и увеличивает значение переменной i на единицу, возвращает ее значение до увеличения, то есть число 0, так как это постфиксный инкремент. Поэтому на консоль будет выведено число 0 + 2 = 2.

    Так как ранее уже было выведено число 1, то после выполнение этого кода на консоли фактически будет число 12.

  6. В конце выполняется строка Console.WriteLine(i), которая добавляет к выведенному числу значение переменной i, то есть 1.

Таким образом, на консоль будет выведено число 121.

Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850