Devrains
@Devrains

Параметры функции?

Жесть вопрос, знаю.

Зачем передавать переменные-параметры в функцию, если можно писать глобальное объявление переменных?

Так:
int func(int a, int b)
{
       ...
}


А почему не так:
int a, b;

int func()
{
      ...
}


Ну и еще:
int func()
{
      int a, b;
         ...
}
  • Вопрос задан
  • 78 просмотров
Решения вопроса 2
wataru
@wataru
Разработчик на С++, гуглер, экс-олимпиадник.
Потому что иначе невозможна рекурсия. Что если у вас f(1,3) захочет вызвать f(0,0). Еще придется эти глобальные переменные переписать и потом как-то восстанавливать, если после вызова f(1,3) еще что-то хочет делать с этими параметрами.

Потом, это тупо неудобно. Для каждой функции нужен свой набор глобальных переменных.

Это про второй ваш вариант.
В третьем же a и b локальные переменные. Получается вы их никак снаружи функции не сможете задать.

Кажется, у вас непонимае. Функции нужны не просто для того, чтобы распилить программу на меньшие логически обособленные блоки, но и для переиспользования этих блоков в разных ситуациях. Вот пример - функция вывода строки на экран. Она в качестве параметра принимает строку для вывода. Ее можно вызывать для разных строк. Иначе смысла в ней вообще нет. Вот зачем нужны параметры.
Ответ написан
@vabka
Токсичный
Зачем передавать переменные-параметры в функцию, если можно писать глобальное объявление переменных?

1. Чтобы избавлять от дублирования (ну вообще это сам смысл функций)
2. Чтобы удобнее работать с этими функциями (сразу видишь, что функция от тебя ждёт)
3. Чтобы нормально работало в многопоточной среде. (глобальные переменные и многопоток не совестимы)

Ну вот например менее абcтрактный пример:
int sum(int a, int b) { // всё отлично, всё понятно
  return a + b;
}

int a,b;
// Каким образом мы поймём, что надо перед вызовом sum задать какое-то значение переменным a и b?
// sum и её "параметры" a и b никак не связаны
int sum() {
  return a + b;
}

int sum() { // а как в этом случае нам сложить две переменные? Как задать значения a и b??????
  int a,b;
  return a + b;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы