Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
jответы.docx
Скачиваний:
29
Добавлен:
11.05.2015
Размер:
76.47 Кб
Скачать
  • malloc -выделение памяти

  • calloc -чистое выделение памяти

  • free -освободить

  • Void *calloc(size_t num, size_t size)

  • Прототип: 

  • stdlib.h

  • Описание: 

  • Функция calloc() возвращает указатель на выделенную память. Размер выделенной памяти ра­вен величине num*size, где size задается в байтах. Это означает, что функция calloc() выделяет достаточно памяти для массива из num объектов каждый размером size байт.

  • Функция calloc() возвращает указатель на первый байт выделенной области. Если памяти недо­статочно для удовлетворения запроса, то возвращается нулевой указатель. Всегда важно прове­рять возвращаемое значение на его равенство NULL, прежде чем использовать этот указатель.

Прототип: 

stdlib.h

Описание: 

Функция realloc() изменяет величину выделенной памяти, на которую указывает ptr, на новую величину, задаваемую параметром newsize. Величина newsize задается в байтах и может быть больше или меньше оригинала. Возвращается указатель на блок памяти, поскольку может возникнуть необходимость переместить блок при возрастании его размера. В таком случае содержимое ста­рого блока копируется в новый блок и информация не теряется.

Если свободной памяти недостаточно для выделения в куче блока размером newsize, то возвра­щается нулевой указатель.

Void *malloc(size_t size)

Прототип: 

stdlib.h

Описание: 

Функция malloc() возвращает адрес на первый байт области памяти размером size байт, кото­рая была выделена из кучи. Если памяти недостаточно, чтобы удовлетворить запрос, функция malloc() возвращает нулевой указатель. Очень важно всегда проверять возвращаемое значение на его равенство NULL, прежде чем пытаться использовать этот указатель. Попытка использования нулевого указателя обычно влечет крах системы.

20.Функции. Описание, вызов, список параметров

Для написания больших программ лучше пользоваться функциями. Программа будет состоять из отдельных фрагментов кода, под отдельным фрагментом кода понимается функция. Отдельным, потому, что работа отдельной функции не зависит от работы какой-нибудь другой. То есть алгоритм в каждой функции функционально достаточен и не зависим от других алгоритмов программы. Однажды написав функцию, её можно будет с лёгкостью переносить в другие программы. Функция (в программировании) — это фрагмент кода или алгоритм, реализованный на каком-то языке программирования, с целью выполнения определённой последовательности операций. Итак, функции позволяют сделать программу модульной, то есть разделить программу на несколько маленьких подпрограмм (функций), которые в совокупности выполняют поставленную задачу. Еще один огромнейший плюс функций в том, что их можно многократно использовать. Данная  возможность позволяет многократно использовать один раз написанный код, что в свою очередь, намного сокращает объем кода программы! Кроме того, что в С++ предусмотрено объявление своих функций, также можно воспользоваться функциями определёнными в стандартных заголовочных файлах языка программирования С++. Чтобы воспользоваться функцией, определённой в заголовочном файле, нужно его подключить. Например, чтобы воспользоваться функцией, которая возводит некоторое число в степень, нужно подключить заголовочный файл <cmath> и в запустить функцию pow() в теле программы. Разработаем программу, в которой запустим функцию pow().Всегда после имени функции ставятся круглые скобочки, внутри которых, функции передаются аргументы, и если аргументов несколько, то они отделяются друг от друга запятыми. Аргументы нужны для того, чтобы функции передать информацию. Например, чтобы возвести число 3.14 в квадрат используя функцию pow(), нужно как-то этой функции  сообщить, какое число, и в какую степень его возводить. Вот именно для этого и придуманы аргументы функций, но бывают функции, в которых аргументы не передаются, такие функции вызываются с пустыми круглыми скобочками. Итак, для того, чтобы воспользоваться функцией из стандартного заголовочного файла С++ необходимо выполнить два действия: 1. Подключить необходимый заголовочный файл; 2. Запустить нужную функцию. (Заголовок функции имеет вид type имя_функции ([список параметров]))

21. Тип void. Явное и неявное преобразование типов.

Тип void синтаксически эквивалентен основным типам, но использовать его можно только в производном типе. Объектов типа void не существует. С его помощью задаются указатели на объекты неизвестного типа или функции, невозвращающие значение. void f();    // f не возвращает значения void* pv;    // указатель на объект неизвестного типа. Указатель произвольного типа можно присваивать переменной типа void*. На первый взгляд этому трудно найти применение, поскольку для void* недопустимо косвенное обращение (разыменование). Однако, именно на этом ограничении основывается использование типа void*. Он приписывается параметрам функций, которые не должны знать истинного типа этих параметров. Тип void* имеют также бестиповые объекты, возвращаемые функциями. Для использования таких объектов нужно выполнить явную операцию преобразования типа. В C++ различают явное и неявное преобразование типов данных. Неявное преобразование типов данных выполняет компилятор С++, ну а явное преобразование данных выполняет сам программист. О преобразовании типов данных скажу следующее: «Результат любого вычисления будет преобразовываться к наиболее точному типу данных, из тех типов данных, которые участвуют в вычислении».

22. Локальные переменные представляют собой переменные, объявляемые внутри функции. Имя и значение локальной переменной известны только функции, внутри которой переменная объявлена. Вы должны объявлять локальные переменные в начале вашей функции сразу же после первой открывающей фигурной скобки. Имена, назначаемые локальным переменным, должны быть уникальными только для функции,внутри которой эти переменные определены. При объявлении локальной переменной внутри функции ее можно инициализировать с помощью оператора присваивания. Глобальная переменная представляет собой переменную, чье имя и значение известны на протяжении всей программы. Для создания глобальной переменной вы объявляете переменную в начале вашего исходного файла вне какой-либо функции. Все функции, которые следуют за таким объявлением, могут использовать эту глобальную переменную. Однако, поскольку злоупотребление глобальными переменными может привести к ошибкам, следует избегать их использования в ваших программах везде, где это возможно. Областью видимости идентификатора называется область программы, в которой на данный идентификатор можно сослаться. На некоторые идентификаторы можно сослаться в любом месте программы, тогда как на другие - только в определенных ее частях. Например, когда мы объявляем переменную в блоке, на нее можно ссылаться только в этом блоке или в блоке, вложенном в этот блок.

23.Прототипы функций. Перезагрузка функций Перегрузка функций C++ позволяет вашим программам определять несколько функций с одним и тем же именем. Перегруженные функции должны возвращать значения одинакового типа*, но могут отличаться количеством и типом параметров. До появления перегрузки функций в C++ программисты языка С должны были создавать несколько функций с почти одинаковыми именами. К сожалению программисты, желающие использовать такие функции, должны были помнить, какая комбинация параметров соответствует какой функции. С другой стороны, перегрузка функций упрощает задачу программистов, требуя, чтобы они помнили только одно имя функции. * Перегруженные функции не обязаны возвращать значения одинакового типа по той причине, что компилятор однозначно идентифицирует функцию по ее имени и набору ее аргументов. Для компилятора функции с одинаковыми именами, но различными типами аргументов — разные функции, поэтому тип возвращаемого значения — прерогатива каждой функции. — Прим.перев. Перегрузка функций предоставляет несколько "взглядов" на одну и ту же функцию внутри вашей программы. Для перегрузки функций просто определите несколько функций с одним и тем же именем и типом возвращаемого значения, которые отличаются только количеством и типом параметров. В процессе компиляции C++ определит, какую функцию следует вызвать, основываясь на количестве и типе передаваемых параметров. Перегрузка функций упрощает программирование, позволяя программистам работать только с одним именем функции.

24. Когда static применяется к локальной переменной, это приводит к тому, что компилятор создает долговременную область для хранения переменной почти таким же способом, как это делается для глобальной переменной. Ключевое различие между статической локальной и глобальной переменными заключается в том, что статическая локальная переменная остается известной только в том блоке, в котором она была объявлена. Проще говоря, статическая локальная переменная - это локальная переменная, сохраняющая свое значение между вызовами функций. Наличие статических локальных переменных очень важно для создания самостоятельных функций поскольку имеется несколько типов подпрограмм, сохраняющих значение между вызовами. Если использование статических переменных недопустимо, то следует использовать глобальные переменные, но это может привести к побочным эффектам. Ниже приведен простой пример того, как статитеская локальная переменная может использоваться в функции count().Статические локальные переменные используются в тех случаях, когда необходимо сохранить значение переменной в памяти после того, как выполнение функции будет завершено, или, другими словами, между вызовами функций. В следующем примере функция getavg() подсчитывает среднее арифметическое значений, полученных ею, с учетом нового переданного ей значения. Функция запоминает количество переданных ей значений и с каждым новым вызовом увеличивает это значение на единицу. Функция возвращает среднее арифметическое, полученное путем деления суммы всех переданных значений на количество этих значений. 

25. При передаче обычного параметра вовнутрь функции, внутри этой функции создается локальная копия такого параметра и в программе получаются две независимые друг от друга переменные. Само по себе копирование предполагает некоторые затраты времени и если копируется небольшой объект, то эти затраты вряд ли заметны, но со временем вам может потребоваться обрабатывать объекты приличных размеров, что существенно увеличит время выполнения. Чтобы избежать больших затрат времени как раз и используют ссылки как параметры, принимаемые функцией.    Если программист в качестве параметра функции указывает ссылку на объект, то он скорее всего или преднамеренно хочет изменять объект как глобальный или же хочет работать с этим объектом, но предполагает сам этот объект не трогать. Как вы должны были понять, использование обычных параметров увеличивают время выполнения программы из-за того, что эти параметры копируются. Использование ссылок помогает оптимизировать программу и снизить затраты времени. Вот тут такой момент, что если вы не планируете изменять сам объект, который передаете туда в функцию, но хотите немного оптимизировать код, то пишите в функцию не просто ссылку, а константную.

26. typedef (переименование типов) Полезной функцией является переименование типов. Оно очень часто используется в WinAPI. Смысл в следующем: стандартному типу присваивается новое имя. Это бывает полезно если программист хочет использовать в своей программе какие-то специфические величины, например килограммы: typedef int kg; Теперь можно использовать тип kg, точно также как и int.int weight = 62; // два оператора - kg weight = 62; // эквивалентны. Ну и последнее: Любые переменные. функции, классы, стурктуры имеют имя или идентификатор. Идентфикатор можно составлять только из символов латинского алфавита нижнего и верхнего регистров, цифр и символа подчёркивания. Идентификатор не может начинаться с цифры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]