Языки программирования - концепции и принципы

Чтобы получить функциональные возможности семантики


int i = 4;                                                                  /* Глобальная переменная */                 

C

void proc(int i, float f)

{

i=i+(int) f;                                                           /* Локальная переменная "i" */

}

proc(j, 45.0);                                                      /* Вызов функции */

В ргос изменяемая переменная i является локальной копией, а не глобальной переменной i.



Чтобы получить функциональные возможности семантики ссылки или copy-out, пишущий на С программист должен прибегать к явному использо­ванию указателей:

int i = 4; /* Глобальная переменная */                          [с]

void proc(int *i, float f)

{

*i = *i+ (int) f; /* Косвенный доступ */

}

proc(&i, 45.0); /* Понадобилась операция получения адреса */

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

    В языке C++ этот недостаток устранен, поскольку в нем есть возможность задавать параметры специального ссылочного типа (reference parameters):

int i = 4;                                             // Глобальная переменная

C++

void proc(int & i, float f)

{

       i = i + (int) f;                             // Доступ по ссылке

}

proc(i, 45.0);                                     // He нужна операция получения адреса

   Обратите внимание на естественность стиля программирования, при ко­тором нет неестественного использования указателей. Это усовершенствова­ние механизма передачи параметров настолько важно, что оправдывает использование C++ в качестве замены С.

   Вам часто придется применять указатели в С или ссылки в C++ для пере­дачи больших структур данных. Конечно, в отличие от копирования парамет­ров (copy-in), существует опасность случайного изменения фактического па­раметра.

Содержание раздела