Курс лекций - Микропроцессоры


Параметры подпрограмм - часть 2


Номера регистров, используемые для передачи параметров в функцию в зависимости от типа аргументов приведены в таблице 1

Таблица 1

Номер аргумента char, однобайтовый указатель int, двухбайтовый указатель long,float Нетипизированные указатели
1 R7 R6,R7 R4 - R7 R1 - R3
2 R5 R4,R5 R4 - R7 R1 - R3
3 R3 R2,R3 R1 - R3

Поскольку при вызове функции значения фактических параметров копируются в локальные переменные, в теле функции нельзя изменить значения переменных в вызывающей функции. Например нужно поменять местами значения переменных x и y:

/* Неправильное использование параметров функции */ void change (int x, int y) {int k=x; x=y; y=k; }

В данной функции значения локальных переменных x и y, являющихся формальными параметрами, меняются местами, но поскольку эти переменные существуют только внутри функции change, значения фактических параметров, используемых при вызове функции, останутся неизменными.

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

/* Правильное использование параметров функции */ void change (int *x, int *y) {int k=*x; *x=*y; *y=k; }

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

change (&a,&b);


Начало  Назад  Вперед



Книжный магазин