4.6.3 Передача Параметров

4.6.3 Передача Параметров

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

стандартные и определенные пользователем преобразования тпов. Есть особые правила для передачи векторов (#4.6.5), средство передавать параметр без проверки типа параметра (#4.6.8) и средство для задания параметров по умолчанию (#4.6.6). Рассмотрим

void f(int val, int amp; ref) (* val++; ref++; *)

Когда вызывается f(), val++ увеличивает локальную копию первого фактического параметра, тогда как ref++ увеличивает второй фактический параметр. Например:

int i = 1; int j = 1; f(i,j);

увеличивает j, но не i. Первый параметр – i, передается по значению, второй параметр – j, передается по ссылке. Как уже отмечалось в #2.3.10, использование функций, которые именяют переданные по ссылке параметры, могут сделать програму трудно читаемой, и их следует избегать (но см. #6.5 и #8.4). Однако передача большого объекта по ссылке может быть гораздо эффективнее, чем передача его по значению. В этом случае параметр можно описать как const, чтобы указать, что ссылка применяется по соображениям эффективности, а также чтобы не позволить вызываемой функции изменять значение обекта:

void f(const large amp; arg) (* // значение «arg» не может быть изменено *)

Аналогично, описание параметра указателя как const соощает читателю, что значение объекта, указываемого указателем, функцией не изменяется. Например:

extern int strlen(const char*); // из «string.h» extern char* strcpy(char* to, const char* from); extern int strcmp(const char*, const char*);

Важность такой практики возрастает с размером программы.

Заметьте, что семантика передачи параметров отлична от семантики присваивания. Это важно для const параметров, сслочных параметров и параметров некоторых типов, определяемых пользователем (#6.6).

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Передача параметров

Из книги автора

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


Передача параметров потоку

Из книги автора

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


Передача данных

Из книги автора

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


Передача данных

Из книги автора

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


Повторная передача

Из книги автора

Повторная передача До сих пор рассматривалось получение дублированных подтверждений как свидетельство потери сегментов и затора в сети. Однако согласно RFC 1122 "Requirements for Internet Hosts — Communication Layers", модуль TCP может отправить немедленное подтверждение при получении


Передача параметров

Из книги автора

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


Урок № 67. Передача собственных материалов в переработку на сторону и передача продукции из давальческого сырья

Из книги автора

Урок № 67. Передача собственных материалов в переработку на сторону и передача продукции из давальческого сырья В процессе производственной деятельности предприятия часто приходится осуществлять передачу собственных материалов стороннему переработчику для выпуска


25. Передача параметров по значению, (интеллектуальному) указателю или ссылке

Из книги автора

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


Передача данных

Из книги автора

Передача данных Код для отправки и посылки файлов приведен в листинге 12.5.Листинг 12.5private void butSend_Click(object sender, EventArgs e) { // Открываем файл для отправки и получаем его поток Stream fileStream; try {  fileStream = new FileStream(fileSend, FileMode.Open); } catch (Exception exFile) {  MessageBox.Show("Не могу открыть " + exFile.ToString()); 


22.5. Передача параметров сценарию

Из книги автора

22.5. Передача параметров сценарию Очень часто сценариям нужно передавать различные параметры, например, режим работы или имя файла/каталога. Для передачи параметров используются следующие специальные переменные:? $0 — содержит имя сценария;? $n — содержит значение


Передача параметров

Из книги автора

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


18.3.13. Передача параметров сценария системной команде

Из книги автора

18.3.13. Передача параметров сценария системной команде Позиционные параметры можно передать сценарию, а затем проверить значение переменной. Если при этом пользователь указывает после названия сценария наименование каталога, сценарий заново присваивает специальному


18.4.4. Оператор case и передача командных параметров

Из книги автора

18.4.4. Оператор case и передача командных параметров Можно также использовать оператор case при передаче параметров в сценарии.В следующем сценарии при осуществлении проверки используется специальный параметр $#, который представляет число передаваемых аргументов. Если это


19.3. Передача параметров функции

Из книги автора

19.3. Передача параметров функции Порядок передачи параметров функции аналогичен передаче параметров обычному сценарию. При этом используются специальные переменные $1, $2, … $9. При получении функцией переданных ей аргументов происходит замена аргументов, изначально