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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 13:05   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Проясните работу с указателями функций

Есть код

Код:
void fn(intArg)
{
 int intArg=10;
 // здесь значение intArg равно 10
}

void parent(void)
{
 int n1=0;
 fn(n1);
 // здесь n1 равно 0
}
По логике в функции parent() перменная n1 должна получить значение 10. Но она останется равной 0. В книжке написано, что это происходит, потому что функции передается не переменная, а значение, которое в момент вызова функции находится в переменной.

Получается, что n1 в момент вызова функции parent() будет иметь значение 0. Это значение передастся функции fn(). Т.е. будет

Код:
void parent(void)
{
 int n1=0;
 fn(0)
 {
  int 0=10;
 }
}
Что за ерунда получается?

Последний раз редактировалось fs444; 27.10.2009 в 13:11.
fs444 вне форума Ответить с цитированием
Старый 27.10.2009, 13:16   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Что за ерунда получается?
это точно...

должно быть как-то так

Код:
void fn(int intArg)
{
  intArg=10;
 // здесь значение intArg равно 10
}

void parent(void)
{
 int n1=0;
 fn(n1);
 // здесь n1 равно 0 , потому что в fn создается копия переменной n1 (передача параметра по значению)
}

а вот так n1 изменится после вызова fn (передача параметра по ссылке)

Код:
void fn(int &intArg)
{
  intArg=10;
 // здесь значение intArg равно 10
}

void parent(void)
{
 int n1=0;
 fn(n1);
 // здесь n1 равно 10 
}
counter вне форума Ответить с цитированием
Старый 27.10.2009, 13:34   #3
mYziK
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 38
По умолчанию

или через указатель:
Код:
void fn(int *intArg)
{
   *intArg=10;
   // здесь значение по адресу, хранящемуся в intArg, равно 10
}

void parent(void)
{
   int n1=0;
   fn(&n1);
   // здесь n1 равно 10 
}
Функция принемает адрес переменной (в нашем случае - адрес n1), по которому мы можем менять значение.
mYziK вне форума Ответить с цитированием
Старый 28.10.2009, 15:53   #4
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Пытался скомпилировать код
Код:
#include <stdio.h>
#include <iostream.h>
 
int main()
{
 void fn(intArg)
  {
   int intArg=10;
   // здесь значение intArg равно 10
  }
 void parent(void)
 {
  int n1=0;
  fn(n1);
  // здесь n1 равно 0
 }
}
и получил ошибку
Цитата:
[C++ Error] Ukazateli.cpp(6): E2084 Parameter names are used only with a function body
[C++ Error] Ukazateli.cpp(17): E2139 Declaration missing ;
[C++ Error] Ukazateli.cpp(17): E2190 Unexpected }
что такое "Parameter names are used only with a function body"?
Почему он ругается на какую то точку с запятой и скобку. Вроде синтаксически все правильно.
fs444 вне форума Ответить с цитированием
Старый 28.10.2009, 16:06   #5
mYziK
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 38
По умолчанию

Код:
#include <stdio.h>
#include <iostream.h>

 void fn(intArg)
  {
   int intArg=10;
   // здесь значение intArg равно 10
  }
 void parent(void)
 {
  int n1=0;
  fn(n1);
  // здесь n1 равно 0
 }

int main()
{
  parent();
  return 0;
}
Нельзя объявлять функцию в функции
mYziK вне форума Ответить с цитированием
Старый 29.10.2009, 08:28   #6
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
Нельзя объявлять функцию в функции
Спасибо, понял
fs444 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение графиков функций С++ (методы аппроксимации функций) amdbodia Общие вопросы C/C++ 0 24.05.2009 15:28
использование функций в качестве параметров других функций mono Помощь студентам 0 20.04.2009 18:25
Работа с указателями Mango Помощь студентам 2 23.11.2008 10:33
Работа с указателями!!! HKBD Общие вопросы C/C++ 1 06.10.2008 07:52
Глюки с указателями _Инженер_ Общие вопросы Delphi 1 17.09.2008 20:20