Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Проясните работу с указателями функций


Автор: Mastodont 27.10.2009, 13:10
Есть код

Код

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;
 }
}

Что за ерунда получается?

Автор: 586 27.10.2009, 13:17
Код
void fn(int &intArg)
{
 intArg=10;
 // здесь значение intArg равно 10
}

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

Автор: Mastodont 28.10.2009, 15:54
Пытался скомпилировать код
Код

#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"?
Почему он ругается на какую то точку с запятой и скобку. Вроде синтаксически все правильно.

Автор: Alca 28.10.2009, 17:10
Читай азбуку!  smile

Добавлено @ 17:11
Код

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

Автор: 586 28.10.2009, 18:28
Mastodont, здесь уже ответили на ваш вопрос:
http://programmersforum.ru/showthread.php?p=373825#5
http://www.cyberforum.ru/cpp-builder/thread59285.html#post325421

Цитата(Alca @  28.10.2009,  17:10 Найти цитируемый пост)
Читай азбуку!   smile 

http://books.google.ru/books?id=QuluB-uwHkEC&pg=PA118 кстати его азбука

Автор: Mastodont 29.10.2009, 10:01
Цитата

Mastodont, здесь уже ответили на ваш вопрос:
http://programmersforum.ru/showthread.php?p=373825#5
http://www.cyberforum.ru/cpp-builder/threa...html#post325421

Спасибо, эти две темы я же и создал  smile 

Цитата

вот кстати его азбука

Как раз в этой азбуке, только в русском варианте, я и взял этот код. Страница 94. Но он там был неполностью приведен, поэтому я неправильно понял способ его написания.

Автор: xvr 29.10.2009, 13:56
Цитата(Mastodont @ 28.10.2009,  15:54)
Пытался скомпилировать код
Код

#include <stdio.h>
#include <iostream.h>
 
int main()
{
 void fn(intArg)
  {...
  }
}


Почему он ругается на какую то точку с запятой и скобку. Вроде синтаксически все правильно.

Ни С ни С++ не поддерживают вложенные функции (у тебя fn вложенна в main)

Автор: Mastodont 29.10.2009, 15:01
Цитата

Ни С ни С++ не поддерживают вложенные функции (у тебя fn вложенна в main)

Да, спасибо, теперь понял в чем дело  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)