Форум программистов, компьютерный форум CyberForum.ru

Шаблоны - вопрос - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как в С++ обозначить константу е http://www.cyberforum.ru/cpp-beginners/thread320491.html
Как в С++ обозначить константу е в математических вычеслениях
C++ одномерный массив. Поиск элементов в дипазоне Задание: Существует одномерный массив типа int. Определить имеет ли массив числа в диапазоне от А до В. Если имеет, то вывести их на экран. А и В вводятся из клавиатуры. Помогите пожалуйста с заданием. Желательно с комментариями чтоб понятно было. http://www.cyberforum.ru/cpp-beginners/thread320449.html
C++ Обработка строк
Всем привет!!!Помогите пожалуйста в решении этой задачи!!!!! Разработать алгоритм и программу для определения минимального количества первых символов, по которым можно различать слова из заданного текста. Добавлено через 1 час 19 минут Плиззз!!если есть минутка, помогите пожалуйста!!!
C++ Обработка текста, разделяемого на слова
Задан текст, содержащий произвольное количество строк, в которых отдельные слова могут разделяться одним или несколькими пробелами и знаками пунктуации(переносы не используються). Сформировать новый текст, который являеться результатом одного из следующих преобразований исходного текста: заменить заданное слово на другое слово столько раз, сколько оно встречаеться в тексте. Входные и выходные...
C++ Возвращение трех значений http://www.cyberforum.ru/cpp-beginners/thread320432.html
Как в функции возвратить три значения?
C++ Курсовая по ООП Здравствуйте, столкнулась с проблемой, необходимо сделать курсовую, а в програмировании на С++ полный ноль. Если у кого есть возможность, подскажите. Работа довольно объемная, а времени осталось мало. Есть даже пример похожей работы, но просидев пару часов, так и не смогла ничего понять. Вот само задание, зеленым выделены пункты которые необходимо выполнить. А это пример выполненной... подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
21.06.2011, 11:47     Шаблоны - вопрос
Цитата Сообщение от Nameless One Посмотреть сообщение
было бы вообще классно, если бы была возможность использовать (указатель на) вложенную функцию, которая возвращается другой функцией... Но для этого, как я понял, в языке должен быть GC. Хотя, в принципе, в С оно и не нужно.
При этом в GNU CC такой указатель является валидным только в тот момент, когда активна охватывающая функция.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
int (*fptr)(int);
 
void func1 (void)
{
  int x;
 
  /* Физически вложенная функция func2 может работать только в тот момент,
   * пока исполнение находится внутри func1 (или функций, вызванных из func1).
   * Потому как в противном случае обращение к переменной x не имеет смысла,
   * если её уже не существует */
  int func2 (int y)
  {
    return y + x;
  }
 
  fptr = func2;
 
  func3 ();
}
 
void func3 (void)
{
  /* Здесь мы можем использовать указатель на функцию func2, потому как func1
   * ещё не завершилась */
  fptr (1);
}
 
void trampampam (void)
{
  func1();
 
  /* А здесь использовать указатель на функцию func2 мы не имеем права,
   * потому как функция func1 уже завершила свою работу */
  fptr (1);
}
Добавлено через 5 минут
Дополнительно есть ещё вот какой момент. В точке взятия адреса на вложенную функцию в результирующий указатель на функцию как бы ещё и записывается dynamic chain. Т.е. некая информация об активации стека, чтобы при обращении к локалам охватывающей функции доставались именно те значения, которые находятся в стеке вызова в тот момент, когда брался адрес. Криично для рекурсивных вызовов: мы мжем вызвать func1, далее куда-то отдать указатель на func2, далее как-то опять рекурсивно попасть в func1 и опять взять указатель на func2. Так вот два разных вызова по указаетелю func2 при обращении к переменной x будут обращаться к разным активациям стека func1
 
Текущее время: 05:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru