Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 27.01.2021
Сообщений: 5

Объявление указателя на массив указателей на функцию

29.01.2021, 09:52. Показов 1164. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Запишите объявления указателя на массив с 5х10 указателей на функцию без аргументов, которая возвращает указатель на значение типа int. ПОМОГИТЕ ПОЖАЛУЙТА
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.01.2021, 09:52
Ответы с готовыми решениями:

Объявление указателя-константы и вывод адреса любого из указателей
Добавьте в программу объявление указателя-константы. Добавьте в программу вывод адреса любого из указателей, указанных в программе. ...

Запишите объявления указателя на массив с 5х10 указателей на функцию без аргументов, которая возвращает указатель на зна
Запишите объявления указателя на массив с 5х10 указателей на функцию без аргументов, которая возвращает указатель на значение типа int....

Компилятор не принимает объявление указателя на функцию
Портирую библиотеку коннектора на си для tarantool. Код целиком тут. Туллчейн - cygwin - cmake - clion. При сборке возникает две...

15
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
29.01.2021, 12:08
Цитата Сообщение от x4lva Посмотреть сообщение
ПОМОГИТЕ ПОЖАЛУЙТА
C++
1
2
using Ptr = int * (*)();
Ptr (*a) [5][10];
Добавлено через 1 час 53 минуты
DrOffset, почему синтаксически не верно данное определение?
C++
1
(int * (*)() ) (*a) [5][10];
а такое уже верно
C++
1
2
using Ptr = int * (*)();
Ptr (*a) [5][10];
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.01.2021, 12:21
Цитата Сообщение от x4lva Посмотреть сообщение
Запишите объявления указателя на массив с 5х10 указателей на функцию без аргументов, которая возвращает указатель на значение типа int. ПОМОГИТЕ ПОЖАЛУЙТА
C++
1
2
3
4
int *func()
{
    return nullptr;
}
C++
1
2
int *(*(*arr)[10][20])() = nullptr;     
(*arr)[0][0] = &func;
Добавлено через 5 минут
https://docs.microsoft.com/en-... -functions
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
29.01.2021, 14:09
Цитата Сообщение от _stanislav Посмотреть сообщение
C++
1
(int * (*)() ) (*a) [5][10];
Из-за вот этих скобок:
Code
1
2
(int * (*)() ) (*a) [5][10];
^------------^
Ты же видишь что это получается по сути? Некий идентификатор a используется в выражении, где к нему сначала применяют разыменование, а затем к результату операцию индексации, и все, что в итоге получилось, приводят с типу int *(*)() посредством c-style-cast.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
29.01.2021, 16:04
Цитата Сообщение от DrOffset Посмотреть сообщение
Из-за вот этих скобок:
а если скобки убрать, почему тип указателя на функцию не интерпретируется как тип?

Добавлено через 17 секунд
C++
1
int * (*)() (*a) [5][10];
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
29.01.2021, 16:17
Цитата Сообщение от _stanislav Посмотреть сообщение
почему тип указателя на функцию не интерпретируется как тип?
Потому что грамматика С++ не определяет тип таким образом.
Проще говоря: у тебя всегда должны быть какие-то одни скобки в центре (в случае, когда они нужны), а тут получается несколько скобок на одном уровне - такое не допускается.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
29.01.2021, 16:22
Цитата Сообщение от DrOffset Посмотреть сообщение
Потому что грамматика С++ не определяет тип таким образом.
поэтому такие уродства надо шлепать?
C++
1
int *(*(*arr)[10][20])()
где почитать про такие объявления у Эккеля?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
29.01.2021, 16:41
_stanislav, приблизительно выражаясь, либой тип в С\С++ - это
prefix name\name_of_typedef suffix.
suffix - просто опциональный

Т.е. идентификатор типа, и, скажем так, его "точка отсчета", как бы всегда находятся в центре.
Если это знать, то никаких сложностей с пониманием подобных синтаксических конструкций не возникает. Все сложности от попытки думать, что все значимые синтаксические конструкции находятся слева от идентификатора (как это сделано в некоторых других языках). Не надо так думать и жизнь сразу наладится.

Добавлено через 13 минут
Уточню, что речь выше про объявления объекта\функции заданного типа и про typedef-объявления (которые специльно сделаны похожими на объявление объекта, см. D&E). Т.е. выше фразу "любой тип" надо читать как "объявление (объекта\функции, typedef) любого типа".
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
29.01.2021, 17:03
Цитата Сообщение от DrOffset Посмотреть сообщение
объекта\функции
это значит объекта или функции?

если разобрать это
C++
1
int *(*(*arr)[10][20])()
C++
1
2
3
(*arr) // указатель
[10][20] // массив
int *(*)() //указатель на функцию
[10][20] (suffix) в этом объявлении опция? а int *(*)() (prefix) как будто слева обозначает тип массива?
Читаются такие объявления как бы изнутри наружу? От цента справа на лево?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
29.01.2021, 17:17
Цитата Сообщение от _stanislav Посмотреть сообщение
Читаются такие объявления как бы изнутри наружу?
Изнутри наружу, да.
Можно, и достаточно удобно, читать по спирали.

Цитата Сообщение от _stanislav Посмотреть сообщение
это значит объекта или функции?
Ну функция(имя функции) свой тип тоже как бы вокруг себя располагает.
Функция с объявлением void foo(), имеет тип void(). Идентификатор по центру, видишь? Prefix - это void, suffix - ()
Объект с объявлением int a, имеет тип int, где int как раз условный prefix, а suffix не задействуется.
Объект с объявлением int a[10], имеет тип int[10], где int как раз условный prefix, а suffix - [10].

Все остальные примеры просто усложняют этот базовый подход.

Акцентирую внимание, что то, что я сейчас рассказываю - это не формальное объяснение, а просто демонстрация того, как можно мыслить, чтобы не путаться в этих вещах. За формальными объяснениями отправляю в грамматику C++ (см приложения к стандарту).
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
29.01.2021, 19:25

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
За формальными объяснениями отправляю в грамматику C++ (см приложения к стандарту).
у меня от излишней формальности мозги скукоживаются



Добавлено через 1 час 15 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
см. D&E
2.8.1.?

Добавлено через 47 минут
DrOffset, почему Деннис Ритчи, вроде как логичный человек, придумал (как сказал Страуструп) не логичный синтаксис C?

Цитата Страуструпа:
...
Ведь от нелогичного синн
таксиса C страдаю и я, и другие разработчики компиляторов C++, составители доо
кументации, разработчики инструментальных средств
...
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
29.01.2021, 20:06
_stanislav, так было удобнее в то время. Меньше набирать текста, меньше исходник, меньше памяти занимает и т.д.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12923 / 6790 / 1818
Регистрация: 18.10.2014
Сообщений: 17,181
29.01.2021, 21:10
Цитата Сообщение от _stanislav Посмотреть сообщение
почему Деннис Ритчи, вроде как логичный человек, придумал (как сказал Страуструп) не логичный синтаксис C?
Деннис Ритчи:

For each object of such a composed type, there was already a way to mention the underlying object: index the array, call the function, use the indirection operator on the pointer. Analogical reasoning led to a declaration syntax for names mirroring that of the expression syntax in which the names typically appear. Thus,
int i, *pi, **ppi;
declare an integer, a pointer to an integer, a pointer to a pointer to an integer. The syntax of these declarations reflects the observation that i, *pi, and **ppi all yield an int type when used in an expression. Similarly,
int f(), *f(), (*f)();
declare a function returning an integer, a function returning a pointer to an integer, a pointer to a function returning an integer;
int *api[10], (*pai)[10];
declare an array of pointers to integers, and a pointer to an array of integers. In all these cases the declaration of a variable resembles its usage in an expression whose type is the one named at the head of the declaration.
https://jslint.com/chistory.html
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
29.01.2021, 21:52
TheCalligrapher,
суть в том что бы сделать объявления переменных похожими на их использование?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12923 / 6790 / 1818
Регистрация: 18.10.2014
Сообщений: 17,181
29.01.2021, 21:54
Цитата Сообщение от _stanislav Посмотреть сообщение
суть в том что бы сделать объявление переменных похожим на их использование?
Да, суть в этом. Я думаю, что фразу "сделать объявление переменных похожим на их использование" вы слышали уже сотни раз и ранее.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
29.01.2021, 21:59
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
вы слышали уже сотни раз и ранее
вроде слышал. а зачем? что бы сделать язык проще и быстрее запоминающимся?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.01.2021, 21:59
Помогаю со студенческими работами здесь

Возврат указателя на массив указателей
Доброго времени суток. Есть программа, где куча методов должны работать с одни массивом указателей. Как мне сделать, чтобы в функции...

Разадресация указателя в массив из указателей
float *A, **B; A = new float ; B = new float* ; for (int i = 0; i < n; i++) { //*(A + i) = rand()%1000 / 100; *(A + i) = n -...

Трудности с выводом указателя на массив из указателей
Привет, встретился с проблемой. Сколько гуглил - не помогло. Среда разработки Visual Studio. Насколько я знаю, вернуть двумерный...

Дан массив из прототипов функций или указателей на функцию, сделать функцию, возвращающую этот массив
Не охота создавать лишнею тему извиняюсь заранее Вопрос такой Можете подсказать есть массив из прототипов функций или...

Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей
Здравствуйте. Помогите, пожалуйста, разобраться с одним большим заданием. Задание пока в процессе написания, но уже наверное есть ошибки....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru