Основы программирования на C++. Крыжановская Ю.А. - 16 стр.

UptoLike

Составители: 

16
extern void swap(int*, int*); // описание
void swap(int*, int*) // определение
{
int t = *p;
*p =*q;
*q = t;
}
Когда вызывается функция, дополнительно выделяется память под ее
формальные параметры, и каждый формальный параметр инициализируется
соответствующим ему фактическим параметром. Тип фактического парамет-
ра сопоставляется с типом формального параметра, и выполняются все стан-
дартные и определенные пользователем преобразования типов. Есть особые
правила для передачи векторов, средство передавать параметр без проверки и
средство
для задания параметров по умолчанию. Из функции, которая не
описана как void, можно (и должно) возвращать значение. Возвращаемое
значение задается оператором return, которых может быть и больше одного:
int fac(int n)
{
if (n > 1)
return n*fac(n-1);
else
return 1;
}
Каждый раз, когда вызывается функция, создается новая копия ее па-
раметров и автоматических переменных. После возврата из функции память
используется заново, поэтому возвращать указатель на локальную перемен-
ную неразумно, т.к. содержание указываемого места изменится непредска-
зуемо.
Если в качестве параметра функции используется вектор, то передается
указатель на его первый элемент
. Например:
int strlen(const char*);
void f()
{
char v[] = "a vector"
strlen(v);
strlen("Nicholas");
};
Вектор отличается от всех остальных типов тем, что вектор не переда-
ется (и не может передаваться) по значению. Размер вектора недоступен вы-
зываемой функции. Это может быть неудобно, но эту сложность можно
обойти несколькими способами. Строки оканчиваются нулем, поэтому их
размер можно легко вычислить. Для других векторов можно передавать вто-
рой
параметр, который задает размер, или определить тип, содержащий ука-
затель и индикатор длины, и передавать его вместо просто вектора. Напри-
мер:
void compute1(int* vec_ptr, int vec_size); // один способ
struct vec { // другой способ
      extern void swap(int*, int*); // описание
      void swap(int*, int*)      // определение
      {
        int t = *p;
        *p =*q;
        *q = t;
      }
      Когда вызывается функция, дополнительно выделяется память под ее
формальные параметры, и каждый формальный параметр инициализируется
соответствующим ему фактическим параметром. Тип фактического парамет-
ра сопоставляется с типом формального параметра, и выполняются все стан-
дартные и определенные пользователем преобразования типов. Есть особые
правила для передачи векторов, средство передавать параметр без проверки и
средство для задания параметров по умолчанию. Из функции, которая не
описана как void, можно (и должно) возвращать значение. Возвращаемое
значение задается оператором return, которых может быть и больше одного:
      int fac(int n)
      {
        if (n > 1)
          return n*fac(n-1);
        else
          return 1;
      }
      Каждый раз, когда вызывается функция, создается новая копия ее па-
раметров и автоматических переменных. После возврата из функции память
используется заново, поэтому возвращать указатель на локальную перемен-
ную неразумно, т.к. содержание указываемого места изменится непредска-
зуемо.
      Если в качестве параметра функции используется вектор, то передается
указатель на его первый элемент. Например:
      int strlen(const char*);
      void f()
      {
        char v[] = "a vector"
        strlen(v);
        strlen("Nicholas");
      };
      Вектор отличается от всех остальных типов тем, что вектор не переда-
ется (и не может передаваться) по значению. Размер вектора недоступен вы-
зываемой функции. Это может быть неудобно, но эту сложность можно
обойти несколькими способами. Строки оканчиваются нулем, поэтому их
размер можно легко вычислить. Для других векторов можно передавать вто-
рой параметр, который задает размер, или определить тип, содержащий ука-
затель и индикатор длины, и передавать его вместо просто вектора. Напри-
мер:
      void compute1(int* vec_ptr, int vec_size); // один способ
       struct vec {                // другой способ
                                16