Помогите мне, пожалуйста, а то я уже все статьи перечитал и все равно не понимаю
Знаю, что есть основные типы данных и есть составные
Но я не понимаю то, как например сама функция может являться типом данных?
Ведь перед объявлением функции мы указываем какого типа данных она будет
int Foo()
{}
Получается может быть так, что мы указываем тип данных другому типу данных ??
(Я не про то, когда меняется тип данных один на другой)
C/C++
Что такое вообще типы данных в с++? Что НЕ является типом данных
Значением имени Foo является указатель - адрес в памяти, по которому находится функция. Когда мы пишем Foo();, то запускаем выполнение кода, расположенного по этому адресу. Но просто Foo - без круглых скобок - это только адрес в памяти. И тип "функция" относится не к коду функции, а к адресу функции в памяти. Присваиваем и передаём как параметр не код функции, а адрес функции.
И в этом отношении указатель на функцию ничем не отличается от указателя на int. А тип - это всего лишь информация о смысле того, что содержится по указанному адресу. Если это целое - мы можем прибавить или отнять, умножить или разделить. А если функция - можем выполнить.
И в этом отношении указатель на функцию ничем не отличается от указателя на int. А тип - это всего лишь информация о смысле того, что содержится по указанному адресу. Если это целое - мы можем прибавить или отнять, умножить или разделить. А если функция - можем выполнить.
Ну вот, например, тип функции не является типом данных. А операции языка - не типы вообще и типов не имеют. Переменная - имеет тип, но типом не является. И т.п.
Тип данных - это название описания, как следует интерпретировать последовательность кодирующих какую-то информацию битов и какие операции и преобразования к этой последовательности можно применять.
Тип данных - это название описания, как следует интерпретировать последовательность кодирующих какую-то информацию битов и какие операции и преобразования к этой последовательности можно применять.
Поясню Андрея.
Если функции имеют разные имена, но принимают одинаковые типы и возвращают тоже, то говорят, что функции однотипны.
Если функции имеют разные имена, но принимают одинаковые типы и возвращают тоже, то говорят, что функции однотипны.
ты не являешься типом
Как сказано Андреем:
Имена функций и переменных - это все адреса имеющие понятное человеку значение.
Пример: имеем некоторую область памяти начиная с адреса 0000 размером 12 байт
А если понятно что это, то можно выполнить некторые действия, например С=A+B:
Тип - это информация о смысле того, что содержится по указанному адресу.
То-есть указание компилятору как следует обрабатывать тот или иной участок памяти.Имена функций и переменных - это все адреса имеющие понятное человеку значение.
Пример: имеем некоторую область памяти начиная с адреса 0000 размером 12 байт
00 00 00 01 00 00 00 01 00 00 00 00
Абсолютно не понятно что это и с чем его есть. Но если мы говорим компилятору что по адресам 0000, 0004 и 0008 находятся переменные типа unsigned int условно названные A B C, а компилятор знает, что unsigned int имеет размер 4 байта и знает как эти 4 байта интерпретировать, то сразу становится понятно что это три числа: A = 1, B = 1, C = 0;А если понятно что это, то можно выполнить некторые действия, например С=A+B:
00 00 00 01 00 00 00 01 00 00 00 02
Теперь по адресу 0008 лежит число 2.> не понимаю то, как например сама функция может являться типом данных?
Ответ на этот вопрос зависит от вашего образования. Если еще не закончили школу, то можете пока не заморачиваться. В высшей математике вводится понятие функционального пространства, элементами которого являются уже не числа, а функции и с этими функциями оперируют по правилам, подобным тем, которые используют, скажем, для операций с действительными числами.
В программировании аналогичным образом приходится использовать функторы (это объекты, классы которых реализуют operator(), позволяющий использовать такой объект-функтор как функцию) и обычные сишные функции, которые используют как переменную. Примером может быть например функтор std::negate, который если его вызвать с произвольным типом, поддерживающим операцию унарного минуса, вернет результат, имеющий этот же самый тип и со значением аргумента, к которому была применена эта операция унарного минуса.
Т.е. до момента, когда функция будет вызвана уже с какими-то аргументами, с ней (и другими функциями) возможно манипулировать абстрактно, без учета аргументов и прочего, создавая, например, некоторые комбинации и последовательности применения. Смысл этих действий, конечно, заключается в том, что рано или поздно все это будет вызвано уже с конкретными значениями.
> Ведь перед объявлением функции мы указываем какого типа данных она будет
int Foo() {}
Перед объявлением функции указывают тип возвращаемого значения. Когда говорится, что функция Foo имеет тип int, это означает, что она возвращает результат такого типа, а не то, что символ Foo - целое число. Если же в программе встретится Foo, то он будет иметь тип "указателя на функцию возвращающую целое число и не принимающую аргументов", вот именно в этом значении у функции имеется тип. Который, еще раз подчеркиваю, отличается от типа возвращаемого значения
>Получается может быть так, что мы указываем тип данных другому типу данных ??
Нет. Про возвращаемое значение см. выше, а тип этой самой объявленной функции (указателя на нее, он же символ Foo) на языке Си будет выглядеть как:
Ответ на этот вопрос зависит от вашего образования. Если еще не закончили школу, то можете пока не заморачиваться. В высшей математике вводится понятие функционального пространства, элементами которого являются уже не числа, а функции и с этими функциями оперируют по правилам, подобным тем, которые используют, скажем, для операций с действительными числами.
В программировании аналогичным образом приходится использовать функторы (это объекты, классы которых реализуют operator(), позволяющий использовать такой объект-функтор как функцию) и обычные сишные функции, которые используют как переменную. Примером может быть например функтор std::negate, который если его вызвать с произвольным типом, поддерживающим операцию унарного минуса, вернет результат, имеющий этот же самый тип и со значением аргумента, к которому была применена эта операция унарного минуса.
Т.е. до момента, когда функция будет вызвана уже с какими-то аргументами, с ней (и другими функциями) возможно манипулировать абстрактно, без учета аргументов и прочего, создавая, например, некоторые комбинации и последовательности применения. Смысл этих действий, конечно, заключается в том, что рано или поздно все это будет вызвано уже с конкретными значениями.
> Ведь перед объявлением функции мы указываем какого типа данных она будет
int Foo() {}
Перед объявлением функции указывают тип возвращаемого значения. Когда говорится, что функция Foo имеет тип int, это означает, что она возвращает результат такого типа, а не то, что символ Foo - целое число. Если же в программе встретится Foo, то он будет иметь тип "указателя на функцию возвращающую целое число и не принимающую аргументов", вот именно в этом значении у функции имеется тип. Который, еще раз подчеркиваю, отличается от типа возвращаемого значения
>Получается может быть так, что мы указываем тип данных другому типу данных ??
Нет. Про возвращаемое значение см. выше, а тип этой самой объявленной функции (указателя на нее, он же символ Foo) на языке Си будет выглядеть как:
int (*)() // Вот эту запись можно условно считать типом Foo
int (*t1)(); // А t1 и t2 - это уже переменные, имеющие тип,
int (*t2)(); // соответствующий функции Foo
auto t3 = Foo; // И t3, кстати, тоже
В си два плюса существует несколько основных типов данных
Здесь чётко и понятно описано что есть что и для чего: metanit.com/cpp/tutorial/2.3.php
Здесь чётко и понятно описано что есть что и для чего: metanit.com/cpp/tutorial/2.3.php
Vyacheslav G
Так это понятно про все эти инты и флоаты итд
Как может быть типом данных обычная функция
Говорится, что есть составные типы данных, но я никак это понять не могу
Как может быть типом данных обычная функция
Говорится, что есть составные типы данных, но я никак это понять не могу
По идее, когда ты пишешь int FucnName(), то эта функция должна возвращать число (например, return 1), а если создашь string FuncName(), то она будет возвращать строку. Для меня бесполезное действие, но всяко этому найдется применение.
Например
Например
int main()
{
int result = ChoTo();
cout
Vyacheslav G
Спасибо
Но вот это функция с каким-то типом данных, это я прекрасно понимаю
Но как сама функция может являться типом данных
Просто постоянно встречаю, когда всякие функции называют типом данных
Я знаю, что например указатель это тип данных, который хранит в себе адрес переменной- тут ещё понятно. У него своя специфика, он чисто хранит адрес все ясно и его можно назвать определены типом
Но как можно назвать обычную функцию типом данных, у которой и так есть тип данных
Но вот это функция с каким-то типом данных, это я прекрасно понимаю
Но как сама функция может являться типом данных
Просто постоянно встречаю, когда всякие функции называют типом данных
Я знаю, что например указатель это тип данных, который хранит в себе адрес переменной- тут ещё понятно. У него своя специфика, он чисто хранит адрес все ясно и его можно назвать определены типом
Но как можно назвать обычную функцию типом данных, у которой и так есть тип данных
Не знаю как там на с++, но типы данных это:
Строка: 'Набор абсолютно любых символов113^€÷^hey'
Число: '123'
Число с плавающей запятой: '1.0', '2.5'
Строка: 'Набор абсолютно любых символов113^€÷^hey'
Число: '123'
Число с плавающей запятой: '1.0', '2.5'
Vyacheslav G
Спасибо
А что тогда такое int, double итд
Они же и есть типы данных
Тип: целочисленный например
Как можно обычный текст назвать не просто данными, а типом данных
Будто это определённый тип
А что тогда такое int, double итд
Они же и есть типы данных
Тип: целочисленный например
Как можно обычный текст назвать не просто данными, а типом данных
Будто это определённый тип
Похожие вопросы
- Обработка переполнения в операциях с целыми типами данных в языке С.
- Задача на С Объявить массив данных типа double размером 3 на 3.
- Значение типа const char* нельзя присвоить сущности типа char*
- Есть структура, где много различных полей, в т. ч. типа string. Как потоком читать из файла в структуру данные? Возникает
- C++, Как сделать тип возврата из функции по ситуации / динамический? P.S.auto не поможет
- Список с элементами типа char.
- Лютый препод не унимается. Просит без ООП написать функцию обмена значениями переменных любого типа!
- Неявное приведение типов в С
- Программирование С++ тип даты
- C++: На каких фреймворках, средах разработки C++ делаются большие проекты, по типу Photoshop, Unreal Engine, Steam?
думаю чтобы оценить вопрос и что конкретно непонятно его автору, надо прочитать его предыдущий вариант.