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

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

28.01.2020, 19:52. Показов 2680. Ответов 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,224
28.01.2020, 20:55
Цитата Сообщение от ReYalp Посмотреть сообщение
так это С или С++?
Это уже у вас нужно спрашивать. Данное объявление корректно и в С, и в С++.

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

Не по теме:

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

0
Злостный нарушитель
 Аватар для Verevkin
10344 / 5762 / 1271
Регистрация: 12.03.2015
Сообщений: 26,611
28.01.2020, 21:04
Когда я натыкаюсь на такие конструкции, то понимаю, что язык С изобрёл какой-то маньяк чикатила, чтобы поиздеваться над людьми. Ну зачем так сложно-то, лять?!
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
28.01.2020, 21:05
Цитата Сообщение от Azazel-San Посмотреть сообщение
О, а где можно об этом почитать?
Дизайн и эволюция C++
0
28.01.2020, 21:08

Не по теме:

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

0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,224
28.01.2020, 21:30
Цитата Сообщение от Azazel-San Посмотреть сообщение

Не по теме:


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

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

Но я помню, что где-то кажется читал, что void был изобретением Страуструпа в тогда уже зарождавшемся С++.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
28.01.2020, 22:09
Цитата Сообщение от Croessmah Посмотреть сообщение
https://www.bell-labs.com/usr/dmr/www/chist.html
Случайно нашел перевод на русский.
http://givi.olnd.ru/chist/
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru