Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Сложные определения и объявления

28.01.2020, 19:52. Показов 2649. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил создать отдельный топик т.к. ну совсем никак не могу разобраться (все взято с книги)
есть вот такая штука
C++
1
 void  *  (*(*fpl)(int))[10]
описывается как fpl — указатель на функцию, которая получает аргумент типа int и возвращает указа­тель на массив с 10 указателями на void

почему все так странно? тип который возвращает функция насоклько я понял это void тогда почему этот же void является типом указателя с которых состоит массив? почему то что возвращает функция указывается так странно с помощью []? что будет если я напишу вместо [] int ?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2020, 19:52
Ответы с готовыми решениями:

Объявления и определения структур
Может кто-нибудь объяснить как это работает: //Source1.cpp #include "pch.h" #include <iostream> using namespace std; ...

Отличие объявления, определения и инициализации
Здравствуйте, товарищи. Читаю тут книжицу по C++, учусь потихоньку. И возник у меня вопрос нерядового характера: в чём...

Архитектура правильного определения и объявления класса
Всем привет! В процессе написания одной программы "поймал" себя на том, что видимо не до конца понимаю логику правильного определения...

15
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
28.01.2020, 20:31
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

Чтение объявлений в C: https://habr.com/ru/post/116255/
2
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
28.01.2020, 20:42  [ТС]
Croessmah, так это С или С++? Вообще указатель типа void не очень на С++ похоже
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,174
28.01.2020, 20:55
Цитата Сообщение от ReYalp Посмотреть сообщение
так это С или С++?
Это уже у вас нужно спрашивать. Данное объявление корректно и в С, и в С++.

Цитата Сообщение от ReYalp Посмотреть сообщение
Вообще указатель типа void не очень на С++ похоже
С чего бы это вдруг "указатель типа void не очень на С++ похоже"? Если уж на то пошло, указатели void * первыми появились именно в С++ и пришли в С именно из С++.
2
28.01.2020, 21:01

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Если уж на то пошло, указатели void * первыми появились именно в С++ и пришли в С именно из С++.
О, а где можно об этом почитать?

0
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,214
28.01.2020, 21:04
Когда я натыкаюсь на такие конструкции, то понимаю, что язык С изобрёл какой-то маньяк чикатила, чтобы поиздеваться над людьми. Ну зачем так сложно-то, лять?!
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
28.01.2020, 21:05
Цитата Сообщение от Azazel-San Посмотреть сообщение
О, а где можно об этом почитать?
Дизайн и эволюция C++
0
28.01.2020, 21:08

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Дизайн и эволюция C++
Так и подумал :)

0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
28.01.2020, 21:19
Цитата Сообщение от Verevkin Посмотреть сообщение
Ну зачем так сложно-то, лять?!
https://www.bell-labs.com/usr/dmr/www/chist.html

Цитата Сообщение от Dennis M. Ritchie
An accident of syntax contributed to the perceived complexity of the language. The indirection operator, spelled * in C, is syntactically a unary prefix operator, just as in BCPL and B. This works well in simple expressions, but in more complex cases, parentheses are required to direct the parsing. For example, to distinguish indirection through the value returned by a function from calling a function designated by a pointer, one writes *fp() and (*pf)() respectively. The style used in expressions carries through to declarations, so the names might be declared
C
1
2
int *fp();
int (*pf)();
In more ornate but still realistic cases, things become worse:
C
1
int *(*pfp)();
is a pointer to a function returning a pointer to an integer. There are two effects occurring. Most important, C has a relatively rich set of ways of describing types (compared, say, with Pascal). Declarations in languages as expressive as C—Algol 68, for example—describe objects equally hard to understand, simply because the objects themselves are complex. A second effect owes to details of the syntax. Declarations in C must be read in an `inside-out' style that many find difficult to grasp [Anderson 80]. Sethi [Sethi 81] observed that many of the nested declarations and expressions would become simpler if the indirection operator had been taken as a postfix operator instead of prefix, but by then it was too late to change.

In spite of its difficulties, I believe that the C's approach to declarations remains plausible, and am comfortable with it; it is a useful unifying principle.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,174
28.01.2020, 21:30
Цитата Сообщение от Azazel-San Посмотреть сообщение

Не по теме:


О, а где можно об этом почитать?

Может я что-то выдумываю... Сейчас навскидку не могу найти. Rationale для первого стандарта С говорит, что void и void * в языке C были изобретениями первого комитета по стандартизации в конце 80-х. В K&R не было ни void, ни void *.

Но я помню, что где-то кажется читал, что void был изобретением Страуструпа в тогда уже зарождавшемся С++.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
28.01.2020, 22:09
Цитата Сообщение от Croessmah Посмотреть сообщение
https://www.bell-labs.com/usr/dmr/www/chist.html
Случайно нашел перевод на русский.
http://givi.olnd.ru/chist/
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
28.01.2020, 22:10
Цитата Сообщение от ReYalp Посмотреть сообщение
описывается как fpl — указатель на функцию, которая получает аргумент типа int и возвращает указа­тель на массив с 10 указателями на void
почему все так странно?
небольшие пояснения
1
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
28.01.2020, 22:47
Цитата Сообщение от Croessmah Посмотреть сообщение
Дизайн и эволюция C++
Хм, что-то в книжке The Design and Evolution of C++ не смог найти упоминаний, что типа void не было в С и он был придуман в ходе эволюции С++. Уже во 2м разделе 2.3 CLASSES есть пример с кодом, где фигурирует тип void. Или я не то искал?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Может я что-то выдумываю... Сейчас навскидку не могу найти. Rationale для первого стандарта С говорит, что void и void * в языке C были изобретениями первого комитета по стандартизации в конце 80-х. В K&R не было ни void, ни void *.
Но я помню, что где-то кажется читал, что void был изобретением Страуструпа в тогда уже зарождавшемся С++.
Т.е. до этого вообще не было void? Или речь именно о void*?
Хотите сказать в Си все функции должны были что-то возвращать?
Единственное, что нашел интересное:
Миниатюры
Сложные определения и объявления  
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
28.01.2020, 23:42
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Но я помню, что где-то кажется читал, что void был изобретением Страуструпа в тогда уже зарождавшемся С++.
Посмотрел в эволюции, нет такого, я ошибся. Но нашел упоминание о появлении void * в ANSI C и его заимствовании в C++.
Bjarne Stroustrup - The C++ Programming Language Third Edition
The C language has itself evolved, partly under the influence of the development of C++ [Rosler,1984]. The ANSI C standard [C,1990] contains a function declaration syntax borrowed from ‘‘C with Classes.’’ Borrowing works both ways. For example, the void* pointer type was invented for ANSI C and first implemented in C++.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
первого комитета по стандартизации в конце 80-х.
Упоминание о появлении void я встретил в рассылках 1982 года.
https://www.tuhs.org/Usenet/co... 08934.html

Добавлено через 4 минуты
Цитата Сообщение от Azazel-San Посмотреть сообщение
Хм, что-то в книжке The Design and Evolution of C++ не смог найти упоминаний,
Я ошибся. Там есть о void в параметрах функции.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
29.01.2020, 00:00
Цитата Сообщение от Croessmah Посмотреть сообщение
Упоминание о появлении void я встретил в рассылках 1982 года.
https://www.tuhs.org/Usenet/co... 08934.html
Но там речь идет о С, что была добавлена фича в виде возврата функцией пустоты (void). Но ничего о С++.
А где можно посмотреть на С без void? Как онa выглядела? В первых книгах K&R?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
29.01.2020, 00:13
Цитата Сообщение от Azazel-San Посмотреть сообщение
А где можно посмотреть на С без void? Как онa выглядела? В первых книгах K&R?
Как же много я пропустил, С ранее была больше похожа на динамически типизированный язык, тот же В..
Миниатюры
Сложные определения и объявления  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2020, 00:13
Помогаю со студенческими работами здесь

Сложные объявления в Си
Доброго вечера, форумчане. помогите разобраться в примере 1) Массив указателей на функцию, возвращающую массив функций,...

Записать синтаксис объявления и определения свойства класса для доступа к элементам двухмерного массива данны
Записать синтаксис объявления и определения свойства класса для доступа к элементам двухмерного массива данных

Составить блок схему к готовому коду определения области определения функции
Program Project2; var x,y: real; begin writeln('Введите значение х'); write('х='); readln(x); if x < 0.1*pi then y :=...

Выразить параметры регулятора через критерии модульного определения и системного определения
Uвх=10 нужно выразить регуляторы по критериям МО и СО ,всё понятно,или рет,что не понятно пишите объясню?..

Область определения и множество определения
Здравствуйте! Подскажите, пожалуйста, в чём разница между областью определения и множеством определения функции, а также в чём разница...


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

Или воспользуйтесь поиском по форуму:
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