Typedef int(*PTF)();
PTF test[10];
C/C++
Объясните пожалуйста смысл работы typedef в конкретном коде и зачем это вообще нужно
Стандартное обьявление массива: тип данных, переменная, [ размер ], { содержимое }. Итак чтобы создать массив из какой-то неведомой херни, ее (херь) нужно сделать типом данных c помощью typedef. Но с вероятностью в 49.99% я могу ошибаться.
#include < iostream >
using namespace std;
int foo_maga_trent() //некая супер функция возвращающая инт без параметров
{
cout << "Magetrent activated" << endl;
return 1;
}
int main()
{
typedef int(*PTF)(); // Создаем новый тип данных RTF который соответствует
// указателю на некоторую функцию типа int () т. е. без параметров с инт ретурном.
PTF test[10]{nullptr}; //создаем массив таких RTFов
test[0] = foo_maga_trent; //Присваиваем одному из его элементов нашу подходящую функцию.
cout << test[0](); //Вызываем ее.
}
#include < iostream >
using namespace std;
int foo_maga_trent() //некая супер функция возвращающая инт без параметров
{
cout << "Magetrent activated" << endl;
return 1;
}
int main()
{
typedef int(*PTF)(); // Создаем новый тип данных RTF который соответствует
// указателю на некоторую функцию типа int () т. е. без параметров с инт ретурном.
PTF test[10]{nullptr}; //создаем массив таких RTFов
test[0] = foo_maga_trent; //Присваиваем одному из его элементов нашу подходящую функцию.
cout << test[0](); //Вызываем ее.
}
#include <iostream>
using namespace std;
using call = double (*)(int a, int b); // сейчас это так делается
double sum(int a, int b) { return a + b; }
double divide(int a, int b) { return double(a) / b; }
double subtract(int a, int b) { return a - b; }
double product(int a, int b) { return a * b; }
double remainder(int a, int b) { return a % b; }
int main() {
call box[]{ sum, divide, subtract, product, remainder };
int a = 77;
int b = 18;
for (auto fn : box) cout << fn(a, b) << '\n';
system("pause > nul");
}
using namespace std;
using call = double (*)(int a, int b); // сейчас это так делается
double sum(int a, int b) { return a + b; }
double divide(int a, int b) { return double(a) / b; }
double subtract(int a, int b) { return a - b; }
double product(int a, int b) { return a * b; }
double remainder(int a, int b) { return a % b; }
int main() {
call box[]{ sum, divide, subtract, product, remainder };
int a = 77;
int b = 18;
for (auto fn : box) cout << fn(a, b) << '\n';
system("pause > nul");
}
это такой "очевидно всем понятный" синтаксис -- указатель на функцию
Typedef int(*PTF)()
PTF -- тип - указатель на функцию без параметров, возвращающую int
PTF test[10]; массив указателей на функцию
Typedef int(*PTF)()
PTF -- тип - указатель на функцию без параметров, возвращающую int
PTF test[10]; массив указателей на функцию
Vladimir
че-то очень непонятно
Максим Плющенко
зачем нужно? ну вот понадобилось вдруг создать массив, в котором будут лежать функции, который можно вызывать. вот для этого нужно создать массив на указатели. а тип этого указателя как раз и будет такой
Похожие вопросы
- Объясните, пожалуйста, смысл задачи на C++
- Объясните пожалуйста код по С++
- Можете объяснить пожалуйста строчки в этом коде С++
- Объясните максимально простым языком, как работает данный код C++
- Объясните мне принцип работы циклов
- Помогите решить C++ и если сможете объясните пожалуйста
- Объясните пожалуйста одну штуку в языке программирования С++.
- Объясните как работает этот участок кода, я что то не много запутался с механикой работы.
- Напишите пожалуйста код на 5 вариант очень простой я на 1 курсе вуза и нужен простой код.
- С++, реализовать код с помощью функции, помогите пожалуйста, очень нужно
int (*test[10])() {}; = создаем массив указателей на функции... В принципе тоже самое что в примере выше, только читается сложнее, чем обьявление обычного массива.
второе назначение - код для мультиплатформенных приложений. Вы указываете в typedef все свои переменные. И при переходе на другую платформу будет достаточно переписать только содержание typedef, а не весь код.
Все таки
RTF test[10]; читается проще и понятнее чем
int (*test[10])();
То же касается написания функций, которые принимают и/или возвращают указатель на функцию.
RTF foo(); // сразу понятно что это функция foo возвращающая RTF
{ ...}
int(*foo())(); //это тоже самое, но уже ничерта на ясно и не очевидно.
{ ...}