Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
часть4(измен).doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
298 Кб
Скачать
☆

Принцип модульности в с.

Различают два понятия область существования и область доступа.

Область существования –применяется с точки зрения существования программы, это та ее часть, при использовании которой выделена память под переменную («время жизни»).

Область доступа – совокупность строк программы, в которой можно использовать соответствующий объект (например, идентификатор типа).

Классы памяти в с.

Классы памяти в си относятся к переменным. Существует 4 класса памяти.

<класс памяти> = одно из зарезервированных слов: auto, extern, static, register; используется для описания переменных.

Для локальных переменных класс памяти auto используется по умолчанию. Область существования – с момента описания до конца составного оператора, т.е. до конца описания функции( } ).

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

register, - рассматривается как рекомендация транслятору выделить память под переменную в регистрах процессора. В современных системах программирования использовать не рекомендуется.

extern, - применяется для глобальных переменных; в явном виде не используется, т.к. переменные, память для которых резервируется вне описания функций, автоматически относятся к этому классу. Область существования совпадает с областью доступа(с момента описания до конца текста программы). Память под эти переменные выделяется на все время работы программы.

static, - промежуточный вариант. Обычно используется для описания локальных переменных. Если переменная использует этот класс памяти, то область памяти считается недоступной, но и в то же время не освобождается. Область существования - с момента описания и до конца программы. Область доступа – с момента описания и до конца блока. Данный класс памяти не удовлетворяет принципу модульности.

Передача параметров.

В языке С параметры передаются только значением.

Формируется динамический вариант. Под формальный параметр выделяется отдельная область памяти. В нее пересылается значение фактического параметра.

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

void swap(float *x,float *y)

{

float z; //здесь *x и *y являются указателями на данные действительного типа; z=*x; x,y-локальные переменные; *x=*y; область доступа - функция swap// *y=z;

}

void main { //в результате вызова ф-ии y принимает значение адреса b;

……. X-значение адреса а;

swap(&a,&b); резервируется память под z….. и.т.д//

……

}

В С++ появляется возможность передачи значений ссылкой.

В этом случае память не выделяется. Соответствующий формальный параметр ассоциируется с областью памяти соответствующего фактического параметра

Для этого нужно перед параметром поставить знак «взятие адреса» &, который не является операцией, а носит лишь справочный характер.

В примере, указанном выше, для этого нужно вместо первых двух *(звездочек) поставить символы &(а именно: void swap (float &x, float &y)), а затем обращаться к параметрам уже без символа звездочка(swap(a,b)).

При этом значения x и а хранятся в одной области памяти, под x и y память не выделяется, под z – выделяется.