Язык С++ и программирование на нем. Рейзлин В.И. - 58 стр.

UptoLike

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

60
Рассмотрим, например, вариант функции, возводящей целое x в
целую степень n, где используется это обстоятельство.
int power (int x, int n){
for (int p = 1; n > 0; n – –) p* = x;
return p;
}
Аргумент n используется как временная переменная. Что бы ни
происходило с n внутри функции power, это никак не влияет на факти-
ческий аргумент, с которым первоначально обратились к этой функции
в вызываемой функции:
void main (){
int n=6,
x=3;
x=power(x, n); // n – не меняется.
}
Рассмотрим процесс вызова функции более подробно. При вызове
функции:
в стеке резервируется место для формальных параметров, в ко-
торые записываются значения фактических параметров. Обычно это
производится в порядке, обратном их следованию в списке;
при вызове функции в стек записывается точка возврата ад-
рес той части программы, где находится вызов функции;
в начале тела функции в стеке резервируется место для локаль-
ных (автоматических) переменных.
В случае, если функция должна менять свои аргументы, можно
использовать указатели. Указатели также передаются по значению,
внутри функции создается локальная переменная указатель. Но так
как этот указатель инициализируется адресом переменной из вызывае-
мой программы, то эту переменную можно менять, используя этот ад-
рес.
В качестве примера рассмотрим функцию, меняющую местами
свои аргументы:
void swap (int* x, int* y){
int t = *x;
*x = *y;