Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_voprosy.docx
Скачиваний:
4
Добавлен:
15.04.2019
Размер:
75.36 Кб
Скачать

7. Динамическая память, операции работы с памятью.

В языке программирования Си имеются следующие четыре функции для динамического распределения памяти, входящие в стандартную библиотеку:

malloc (от англ. memory allocation, выделение памяти),

calloc (от англ. clear allocation, чистое выделение памяти)

realloc (от англ. reallocation, перераспределение памяти).

free. (англ. free, освободить)

Эти функции имеют следующие описания:

#include <stdlib.h>

void *malloc (size_t size);

void *calloc (size_t num, size_t size);

void *realloc(void *block, size_t size);

void *free(void *block);

В С++ имеются два оператора:

new delete.( int n=100; float *p= new float [n])

8. Ссылки в С++. Отличие ссылок от переменных-указателей.

Отличие ссылки от указателя грубо говоря такое: Ссылка это просто другое название(псевдоним) для переменной на которую она ссылается. Указатель это переменная представляющая собой адрес другой переменной.

сылка в программировании — это объект, указывающий на определенные данные, но не хранящий их. Получение объекта по ссылке называется разыменованием.

Ссылка не является указателем, а просто является другим именем для объекта.

В языках программирования ссылка может быть реализована как переменная, содержащая адрес ячейки памяти. В некоторых языках высокого уровня также имеется возможность использовать ссылки на объекты при передаче объектов в подпрограмму и из подпрограммы.

Ссылки в C++ должны быть связаны с каким-либо объектом. Таким образом, «нулевые ссылки» (не связанные с каким-либо объектом), в C++ отсутствуют. Разыменование ссылок в C++ не требует специального оператора. Таким образом, в C++ ссылки — форма передачи адреса в стек напрямую, минуя копирование и указатели.

В следующем примере параметр x передаётся по значению, а y — по ссылке. Результат работы функции помещается в y:

#include <iostream>

using namespace std; // без этой записи нам бы пришлось дописывать "std::" к cout и endl

void square(int x, int &result)

{result = x*x;}

int main()

{ int y = 0; //Инициализация

square(3, y);

cout << "y=" << y << endl; //y=9

return 0; }

9. Передача аргументов в функцию по умолчанию.

Передача параметров делится по отношению к вызывающей стороне (фактические):

По значению

По ссылке

и по отношению в вызываемой функции (формальные):

Простой

С указанием значения по умолчанию

Переменное количество аргументов

При передаче аргумента по значению в вызываемую функцию передается значение указанной переменной / константа / вычисляемое выражение. Может быть только атомарным. Если передается значение переменной, а сама переменная не определена, то вознивает ошибка UNDEFINED.

При приеме формального аргумента с указанием значения по умолчанию указывается это значение через знак равенства:

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

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