ВУЗ:
Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 14
- 15
- 16
- 17
- 18
- …
- следующая ›
- последняя »