Многомерные массивы как параметры — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

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

Многомерные массивы как параметры

2020-12-06 108
Многомерные массивы как параметры 0.00 из 5.00 0 оценок
Заказать работу

Если в качестве параметра функции указан массив, то передается указатель на его первый элемент. Это означает, что фактический параметр типа T[] преобразуется к типу T*, и затем передается. Поэтому присваивание элементу формального параметра-массива изменяет этот элемент. Массивы отличаются от других типов тем, что они не передаются и не могут передаваться по значению. В вызываемой функции размер передаваемого массива неизвестен. Его нужно передавать отдельно.

Когда параметром является двумерный массив, его вторая размерность обязательно указывается в объявлении функции

 

float a[ ][4].

 

Объявление параметра как float a[ ][ ] недопустимо.

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

 

Параметры функции, заданные по умолчанию

 

Параметры функции можно задать по умолчанию, тогда это значение будет использовано если параметр будет пропущен при вызове функции.

значение по умолчанию можно задать в заголовке функции, например: int myFunc(int a = 5; int b = 10;){}

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

 

int f(double a, double b = 0, double c = 1)

{

//...

}

Данную функцию можно вызывать либо с одним, либо с двумя, либо с тремя параметрами:

double x = 0.1;

double y = 0.2;

double z = 0.3;

cout << f(x) << f(x, y) << f(x, y, z);

 

Функции подстановки

Функции-подстановки, или встроенные, объявлены с модификатором inline:

inline int min(int a, int b)

{

return a < b? a: b;

}

Если функция объявлена встроенной, то компилятор подставляет в точку вызова ее тело. Спецификация inline служит подсказкой транслятору. Из-за наличия взаиморекурсивных вызовов функций-подстановок, а также функций-подстановок, рекурсивность которых зависит от входных данных, нельзя утверждать, что каждый вызов функции-подстановки действительно реализуется подстановкой ее тела.

Целесообразно с модификатором inline описывать самые простые функции, многократная подстановка которых не существенно повлияет на размеры программы.

 

Перегруженные функции

 

Перегрузка функций — возможность создавать несколько функций с одинаковыми именами но с различным набором параметров.

Для реализации нужно создать несколько функций с одинаковыми именами и типом возвращаемого данных.

Перегруженные функции используются в тех случаях, если несколько функций выполняет одно и то же действие над объектами разных типов и удобно дать одинаковые имена всем этим функциям:

int max(int, int); // Выбор максимального из двух целых чисел

int max(const int *, int); // Выбор максимального элемента массива

int max(const List&);        // Выбор максимального элемента списка

 

Указатель на функцию

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

Указатель на функцию должен тоже описываться с тем же списком параметров и типом возвращаемого значения, что и сама функция. → int (*pf)(int);

 

Скобки вокруг *pf обязательны. Имя функции без следующих за ним скобок интерпретируется как указатель на функцию. Указатель на функцию применяется для вызова функции, которую он адресует.

Часто для удобства определяют синоним типа указателя на функцию через typedef:

typedef int (*FuncType)(int);

FuncType pf;

Указатели на функцию чаще всего используются в качестве формальных параметров других функций.

Указатели могут адресовать варианты перегруженной функции. При этом транслятор подбирает вариант, находя точное сопоставление списка формальных параметров и типа возвращаемого значения. Если такого точного сопоставления нет, то будет сообщение об ошибке.

 

Виды областей видимости

 

·     Локальная

·   Глобальная

·   Классовая

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

В С++ каждый класс образует собственную классовую область видимости, которая не совпадает ни с файловой, ни с какой-либо локальной.

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

 


Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

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

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.