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

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

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

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

2020-12-06 101
Многомерные массивы как параметры 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;

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

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

 

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

 

·     Локальная

·   Глобальная

·   Классовая

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

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

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

 


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

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

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

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

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



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

0.008 с.