ФлеймФорумЮмор

FUN 2.0 (1903 стр)

Страницы: 11902 1903 1904 19052321 Следующая »
#28530
16:12, 27 апр 2022

Сегодня увидел такой вот эпик. Скрин нормальный делать было очень не удобно, так что сори.
photo_2022-04-27_13-13-36 | FUN 2.0

#28531
16:16, 27 апр 2022

Мы попытаемся спалить ваш кампутир

#28532
16:27, 27 апр 2022

Vlad2001_MFS
Это пять!

#28533
18:02, 27 апр 2022

/A\
> Наиболее читаемо вот так
Это твоя привычка и стереотип. В объявлении есть две сущности: тип и название переменной. Тип пробел название переменной.

#28534
18:10, 27 апр 2022

wat
В объявлении есть две сущности: decl-specifier-seq и init-declarator-list.

#28535
18:12, 27 апр 2022

wat
> Тип пробел название переменной.
int(*variable)(int);
Куда пробел ставить?

#28536
18:19, 27 апр 2022
+ понятная аналогия к тому как ставить пробелы в обьявлении указателей
#28537
18:36, 27 апр 2022

beejah
> int(*variable)(int);
> Куда пробел ставить?

Конечно между типом и значением. У значения "разадресовать указатель variable и вызвать разадресованное как функцию с одним int аргументом" тип int.

ТО есть так:

int (*variable)(int);

:)

#28538
(Правка: 19:06) 19:03, 27 апр 2022

Dmitry_Milk
Изображение
int*(*variable)(int*);
?

+ Показать
#28539
19:13, 27 апр 2022

beejah
> Там нет никакого значения

Я тега "сарказм" не нашел, поэтому поставил смайлик.

Но вообще в каждой шутке есть доля шутки - "странность" объявления нетривиальных типов в С/C++ на этом форуме уже обсуждалась - эта странность ("обвешанность" имени переменной всякими спецификаторами то слева то справа) легко объясняентся, если рассматривать объявление переменной наоборот - как применение "операций" к имени переменной (разадресация, индексация, "вызов функции") в соответствии с приоритетами - и в результате мысленного "вычисления выражения" получается именно тот тип, что написан левее всего.

#28540
(Правка: 19:18) 19:16, 27 апр 2022

beejah
> int*(*variable)(int*);

В соответствии с вышенаписанным:
разадресуем указатель variable (указатель на функцию), получаем функцию, вызываем ее с одним аргументом int*, получаем указатель на int, разадресуем его - и в итоге получаем int, то есть так :

int *(*variable)(int *);

Из вышеприведенного "объяснения", кстати, становится понятным, почему есть скобки вокруг *variable - из-за приоритетов операций разадресации и вызова функции.

#28541
19:17, 27 апр 2022

Dmitry_Milk
Про то и речь.
int* var - это изврат какой-то.

#28542
19:29, 27 апр 2022

beejah
> int* var - это изврат какой-то

Тем не менее в простом случае этот изврат почему-то воспринимается естественнее.

Но если случай сложны - то приходится наоборот:

int *(*var1)(int *), *var2, var3[CONST];

#28543
13:54, 28 апр 2022

Изображение

#28544
15:00, 28 апр 2022

Я отформатировался.

Страницы: 11902 1903 1904 19052321 Следующая »
ФлеймФорумЮмор