Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2012, 20:56   #1
IT-school
Пользователь
 
Регистрация: 04.05.2011
Сообщений: 39
По умолчанию Вопросы по теме определения функций

Собственно, продолжаю терзать учебник и появилось несколько вопросов.
Мой работающий код:
Код:
#include <stdio.h>
#include <conio.h>

int first(int);

int
main(void) {
           int x;
           int y =0;
           for (x = 1; x <= 10; x++)
             printf("%d ", first(y) );
           printf("\a");
           getch ();
           return 0;
           }

int 
first(int y) {
          y = 25;
          return y;
          }
И вопросы:
1. Почему надо
Код:
#include <conio.h>
для getch (), хотя раньше работало без этого?
2. Пришлось в основной функции поставить
Код:
int y =0;
Насколько я понимаю, функции не связаны друг с другом одними ячейками памяти?
3. И то, что в дополнительной функции return, указывется то, что возвращается и заполняет память основной скобки, что указано в
Код:
first(y)
?

П.с. Про 2 и 3 пункт - я это понял, когда начал писать вопросы, но хотелось бы уточнить, может особенности есть какие-нибудь?
IT-school вне форума Ответить с цитированием
Старый 09.10.2012, 21:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
хотя раньше работало без этого?
Может раньше не getch а getchar у тебя было?
Цитата:
Насколько я понимаю, функции не связаны друг с другом одними ячейками памяти?
Это называется локализация переменных. Описанная в main int y =0; в других функциях видна не будет.
Цитата:
И то, что в дополнительной функции return, указывется то, что возвращается и заполняет память основной скобки
А это фразу не понял. Ты в first передаешь некий параметр, но работа с ним не влияет на изменение того что ты в нее передал (если не ошибаюсь значение параметра копируется и уже в самой функции работа идет с копией значения)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2012, 17:59   #3
IT-school
Пользователь
 
Регистрация: 04.05.2011
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Может раньше не getch а getchar у тебя было?
getch везде, но везде только основная функция
Код:
#include <stdio.h>

main()
{
      int num1, num2;
      
      printf("Enter two integers, and I will tell you\n");
      printf("the relationships they satisfy: ");
      scanf ("%d%d", &num1, &num2);
      
      if (num1 == num2)
       printf("%d is equal to %d\n\a", num1, num2);
      else
       printf("%d is not equal to %d\n\a", num1, num2);
      if (num1 < num2)
       printf("%d is less than %d at %d\n\a", num1, num2, num2 - num1);
      if (num1 > num2)
       printf("%d is greater than %d at %d\n\a", num1, num2, num1 - num2);
      
      getch();
      return 0;
}
Цитата:
Это называется локализация переменных. Описанная в main int y =0; в других функциях видна не будет.
А можно сделать единую переменную для всех функций?(сразу созрел план, чтобы хранить переменную в отдельной функции и раздавать её куда надо -но это слишком муторно)

Цитата:
А это фразу не понял. Ты в first передаешь некий параметр, но работа с ним не влияет на изменение того что ты в нее передал (если не ошибаюсь значение параметра копируется и уже в самой функции работа идет с копией значения)
Тогда так:
В основной функции стоит
Код:
int x;
first(x)
а функция first в конце имеет
Код:
return y
Значит, в основной функции x = y, где y - это переменная с конечным значением из функции first?
IT-school вне форума Ответить с цитированием
Старый 10.10.2012, 18:10   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А можно сделать единую переменную для всех функций?
Смысл?
Цитата:
сразу созрел план
Сразу его откинь
Цитата:
Значит, в основной функции x = y, где y - это переменная с конечным значением из функции first?
Нет. Это ничего не значит. Переменные внутри функций сами по себе живут не смотря на имена. Это как однофамильцы в одном городе.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2012, 18:19   #5
IT-school
Пользователь
 
Регистрация: 04.05.2011
Сообщений: 39
По умолчанию

Цитата:
Смысл?
Ну а вдруг понадобится?

Цитата:
Сразу его откинь
Жалко))

Цитата:
Нет. Это ничего не значит. Переменные внутри функций сами по себе живут не смотря на имена. Это как однофамильцы в одном городе.
Да, но то, что пишем в скобках в основной функции - это имя переменной из основной функции, которой присваивается то же значение, что было в return в дополнительной?
IT-school вне форума Ответить с цитированием
Старый 10.10.2012, 18:30   #6
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

IT-School, нет, это разные переменные. Почитай на досуге, что такое области видимости. Иначе - это простой треп.

А это называется инициализация переменной(объявление с последующим присваиванием значения):
Код:
int y = 0;
Это нужно для того, чтобы в переменной не хранилось случайных значений, которые могут нарушить ход программы.

Цитата:
Насколько я понимаю, функции не связаны друг с другом одними ячейками памяти?
Зачем вообще тебе это?
Никто

мой блог

Последний раз редактировалось three_cats; 10.10.2012 в 18:39.
three_cats вне форума Ответить с цитированием
Старый 10.10.2012, 18:51   #7
IT-school
Пользователь
 
Регистрация: 04.05.2011
Сообщений: 39
По умолчанию

three_cats, я и хочу сказать, что это разные переменные, но одна становится копией другой.
Про инициализацию я знаю)
Цитата:
Зачем вообще тебе это?
На всякий случай, чтобы лучше разбираться, как программа влияет на железо компа.
IT-school вне форума Ответить с цитированием
Старый 10.10.2012, 19:12   #8
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

Цитата:
Сообщение от IT-school Посмотреть сообщение
three_cats, я и хочу сказать, что это разные переменные, но одна становится копией другой.
Пишется одинаково, но копий там никаких нет.

Цитата:
Сообщение от IT-school Посмотреть сообщение
На всякий случай, чтобы лучше разбираться, как программа влияет на железо компа.
Веришь-нет, никак!
Никто

мой блог
three_cats вне форума Ответить с цитированием
Старый 10.10.2012, 19:42   #9
IT-school
Пользователь
 
Регистрация: 04.05.2011
Сообщений: 39
По умолчанию

А если результат должен зависить от выбора пользователя, который он делал раньше, не заставлять же его вводить данные ещё раз? Зачем тогда вообще нужны функции, если удобнее всё в основной держать?
IT-school вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислите соответствующие значения функции z для каждого х и у, с учетом области определения, входящих в нее функций Romania92 Паскаль, Turbo Pascal, PascalABC.NET 1 29.08.2012 20:26
Delphi: аппроксимация функций методом базиса из финитных функций Denna Помощь студентам 1 12.03.2012 19:23
Построение графиков функций С++ (методы аппроксимации функций) amdbodia Общие вопросы C/C++ 0 24.05.2009 15:28
использование функций в качестве параметров других функций mono Помощь студентам 0 20.04.2009 18:25
формальные определения MetR Помощь студентам 2 27.12.2008 07:34