20. Классы памяти.
Каждый объект в проге принадлежит классу памяти, который определяет:
-время жизни переменной t(c), в течении которого она сохраняет своё значение
-область видимости- часть проги, которой доступен данный объект
1)auto-автоматическое(локальные) по умолчанию любая переменная описывается внутри какой-либо функции. Время и область видимости=блоку, где описывается данный объект, последовательность операторов в{}
Void main(){
Int I;
For (i=1;i<10;i++){
Int j;
J=10-I;
Printf(“%d %d”,I,j);}
Printf(“%d”,i);}
I,j –автоматические (локальные) переменные, тк память под них выделяется и освобождается автоматически, память выделяется в СТЭКЕ.
2)extern-внешние (глобальные) t=t проги, область видимости= всей проге, память выделяется в статической памяти с начала работы проги и до конца.
21. Структуры и объединения
(запись с вариантом) Они относятся к ???? типам данных
1)Объединения являются частью структуры, используются для размещения различных полей в одной и той же области памяти
Struct k1 {
Char adr[15]; (adr|tet)
Long tel;}
Unton k2 {
Char adr[15]; (adr tel|)
Long tel;}
2)Структура –одна или несколько переменных, которые для удобства работы сгруппировывается под одним именем
Struct chelovek{ \
Char adr[15]; |
Char imja[10]; | ЯРЛЫКИ
Char familija[20]; |
Long tel;} /
Их можно копировать, выполнять над ними операции присваивания, передавая функциям в качестве аргументов, а функции могут возвращать их в качестве результатов. В данном примере слова chelovek-тег(ярлык)-название этой структуры и далее служит кратким обозначением части в{}.
22.Прямой доступ к
видеопамяти
Видеопамять-память, в которой хранится информация, отображаемая на мониторе
Если в проге назначить указателю адрес видеопамяти, то получим доступ к информации, выводимой на экран монитора(чтение с экрана).
Преимущество-скорость работы
Для текстового режима В800,0000адрес
Char *v=B8000000указатель на видеопамять
*v=’A’;появляется в левом верхнем углу
Каждый символ занимает 2 байта(символ+его атрибуты)
2000 символов4000 байт=видеопамять
23.Отличия С от С++.
C++ объектно-ориентированный язык
1)в СИ описание локальных переменных в начале функции (блока)
{int I,int j;
I=10;
J=i+2;
В С++ можно описать в любом месте проги,где она понадобилась
{int I;
I=10;
Int j=i+2;
2) возможен доступ к глобальным переменным, которые были перекрытыли локальными
Void main(){
Int n=2;
Printf(“%d_%d”,n,n) доступ к глобальным переменным
3)использование cjnst
#define p:3.1415*2
Const a=10;
Int const a=10;
Float const pi=3.1415;
4)в Си все параметры передаются только по ссылкам, с помощью них нельзя вернуть значение функций используются указатели. С++: есть возможность передавать параметры, используя не локальную копию параметра, а его самого
5)с++ позволяет создавать не только собственные функции, но и собственные операторы
(struct s)operator+(ss1,ss2){
Ss3;
S3.zp=s1.zp+s2.zp;
Return s3;}
Void main(){
S3=s1+s2;
6)перезагрузка функций. В С++ можно создать несколько функций с одним именем, но разным количеством и типом параметров
Void print(int n){
Printf(“%d”,n);}
Void print(float f){
Printf(“%f”,f);}
Void print(char *s){
Printf(“%s”,s);}
Void main(){
Print(10);
Print(‘привет’);}
7)можно использовать поток ввода-вывода
#include<iostreams.h>
Cin –ввод-клавиатура
Cout –вывод-монитор
24.Односвязные списки- список, каждый элемент которого соединяет 1 ссылку на следующий элемент struct spis * head,*p,*pied;
Операции:1) p=head;
P=pnext;
2)# p=(spis*)malloc(siceof(spis));
Вставка в начало списка
head
pnext=head;
Head=p;
# вставка в конец
Tail head p
Tail next=1;
pnext=null;
tail=p;
# вставка в середину
Pred head tail p
pnext=pred;
prednext=p;
3) удаление
Head tail
# головы
P=head;
Head=headnext;
Free(p);
# не головы
Prednext=(prednext)next;
P=prednext;
Prednext=pnext;
Free(p);
25.Двусвязный список-список, где у каждого элемента 2 ссылки: на pred и на next. Операции:
1) вставка t p
(data)(data)
А) выделяется память
Б) изменяются ссылки
ppred=t
pnext=tnext
tnextpred=p
tnext=p
2)удаление tnext=pnext;
tnextpred=p;
free(p);