Здравствуйте. Изучаю С++. Такая задача: написать определение функции, которая принимает в качестве аргумента указатель на функцию и возвращает так же указатель на функцию.
Вот мое решение.
#include
typedef void (*IND_FUNC)(char*,int&); /* void* IND_FUNC(char*,int&); */
/***********************************/
void func(char* simvol,int& values);
IND_FUNC back_index(IND_FUNC);
int main()
{
IND_FUNC arg;
arg=func;
back_index(arg);
}
/**********************************/
IND_FUNC back_index(IND_FUNC)
{
IND_FUNC d;
return d;
}
/**********************************/
void func(char* simvol,int& values)
{
char a=’Y';
*simvol=a;
int b=1010;
values=b;
}
Мне кажется что допустил ошибку, нельзя вернуть локальную переменную d из определения IND_FUNC back_index(IND_FUNC).
Что-то я запутался, пните что не так.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
typedef void (*pfunc_t)(char*, int&);
pfunc_t my_func(pfunc_t)
{
}
Почему нельзя возвращать локальную переменную? Можно. Только осторожно.
Спасибо. Про осторожность обьясни, чтоб знать на какие грабли по возможности не наступать.
А ты сам подумай почему нельзя делать:
int *f(void)
{
int var;
return &var;
}
Чтоб нельзя было изменить значение int var.
не совсем. почитай про выделение памяти для локальных переменных и через new
З.Ы. вообще да, можно, но П-Ц как осторожно :)
Еще раз спасибо :)
Потому что вернули ссылку на уже не существующую переменную и если попытаться присвоить ее(ссылку) какой либо переменной то будет допущенна ошибка
не совсем верно. этот кусок памяти при вызове другой функции перезапишется ее локальными переменными. т.е. там, куда ты вернул из своей функции ссылку, может оказаться хрен знает что.
myst, поправь, если я неправ :)
Не вдаваясь в тоноксти аппаратной реализации стека, мы вернули указатель на не существующую (после выхода из функиции) переменную. При попытке его разыменования поведение системы не определено, вплоть до SIGSEGV.
Посоветуйте пожалуйсто, в таком случае, литературу где «вдаются» в тонкости реализации. Если что-то будет не понятно сейчас, естественно, думаю, с накоплением знаний прояснится.
В свою очередь пойду гуглить.
P.S. За ответы естественно благодарен.
Ну если ты понимаешь как устроен машинный стек, то вопросов быть не должно. Если не понимаешь, <font color=«blue»>тут</font> можешь поковыряться.
Вот. По Стеку, чуток погуглил и нашел вагон с телегой информации.
Еще вопрос. Учусь по Страуструпу. Есть такая задача. написать программу из нескольких функций, вызывающий друг друга до опр. глубины волженности.Ввести аргумен для каждой функции, который в свою очередь определял на какой глубине вложенности сгенерировано исключение. Кое-какие соображения есть, сейчас пытаюсь вырзить в виде кода.
Прошу кинуть пару общих концепций по решению поставленной задачи. НЕ КОД.
Ну а чо? Вызываешь типа так:
f1(x): f2(x+1)
f2(x): f3(x+1)
f3(x): f1(x+1)
и в каждой проверяешь какой сейчас уровень.
Что сложного? Что неочевидного?
Как оказалось -ничего. Теория и практика.
Вот именно.
Допустим есть два класса, у каждого есть статичиский член, можно ли в качестве аргумента конструктора статичиского члена использовать ссылку на статичиский член другого класса? Обновлено: Можно =)
Здорово было если подсказали сырцы где можно подобное встретить, чтоб разобраться.
Сорцы ты вряд ли найдешь, такое в голову редко кому приходит, вот пример разбирайся:
Благодарен, буду дерзать ;)