
- •(1) Основные определения языка с. Алфавит языка. Структ. Прог.
- •Void main () - имя осн. Программы
- •(2) Осн. Типы данных. Константы.
- •(3) Выражения. Операторы.
- •Int i_arr[10]; char liter[80]; double l_mas[100];
- •(18) Понятие об указателях.Объявление и разыменовывание указателей.
- •(22)Динамические структуры данных. Списки.
- •(25)Вычисление интеграла методом прямоугольников c заданной точностью.
- •(26)Вычисление интеграла
- •Void main(){unsigned int I,n; float a,b,X,h,y,s;
- •Designed by barcas&kitty
(18) Понятие об указателях.Объявление и разыменовывание указателей.
Указатель – переменная (типа int, float), содержащая адрес(местоположение ячейки памяти) другой переменной. int i;//переменная целого типа;
int *iptr// указатель на переменную целого типа. указатели требуют инициализации, при этом им присваивается знач- е 0 или конкретный адрес.
использование указателя для получения доступа к адресуемому данному наз-ся разыменовыванием указателя , или операцией косвенной переадресации.
iptr =&i;//&-унарная операция адресации, возвращающая адрес своего операнда. Указатели могут ссылаться только на обьекты заданного типа т.к. переменные разных типов занимют разную память (к void указателям- это не относится).Указатели на переменные обьявленных типов позволяют производить с ними те же действия, что и над переменными соответствующих типов.
(19)Указатели на динамические переменные. Работа с кучей.Для локальных и глобальных переменных(статистических) память резервируется на этапе трансляции. Для динамических переменных память выделяется во время выполнения проги. Такие переменные создаются по требованию проги и запоминаются в блоках памяти переменного размера, принадлежащих куче(область памяти организованной спец. образом). Память в куче для динамических переменных резервируется функцией malloc ();Пример: #include <alloc.h> …char *sptr//обьявить указатель на тип char … sptr=(char*)malloc (129);//резервирование 129 байтов
Оператор резервирования может отказать если куча заполнена или её память меньше чем нужное кол-во байтов. Тогда malloc() возвращает нулевое знач-е, следовательно нужно производить проверку. После выделения блока памяти и присваивания его адресу указателя можно разыменовывать его и использовать память, как память статической переменной. Для резервирования памяти также используется ф-я calloc(num,size).Чтобы не происходило утечки памяти по окончании работы с некоторым блоком памяти следует освободить его функцией free(указатель на блок памяти);Резервирование памяти посредством new(); можно сразу присвоить знач-е объекта:float *fptr=new float(25.759);delete iptr; (20)Указатели на динамические переменные. Массив,структура. int m[5];//объявление массива из 5 эл-тов ;int *mptr;//объявление указателя на m[i];mprt=&m[0];//указатель на 0 эл-т массива; x=*mptr;//копирование содержимого m[0] в x; если mptr – указатель на m[0] , то *(mptr+i)-содержимое m[i], а не указатель на m[i]. *ptr++ -разыменовывает *ptr и передвигает указатель ptr к следующему эл-ту массива. К указателям на массивы применимы операции: +,- и <,>(для рядом стоящих эл-тов массива),для сравнения дальних указателейнадо использовать указатели huge, они имеют нормализованные значения смещений: от 0(10) до 15(10). char huge *sptr//объявление указателя типа huge. программы с huge-указателями работают медленнее чем с дальними указателями (например:far[0000:0010]) struct ym{int year; int month;} date; struct ym*date_ptr;//указатель на структуру типа ym date_ptr=(struct ym*)malloc(sizeof(struct ym));//указатель date_ptr адресует блок памяти для запоминания одной структуры типа ym. date->year=2001;//доступ к полю структуры, имеющей указатель (21)Динамические структуры данных.Списки. Динамические структуры- формируются и размещаются в памяти в процессе выполнения проги. Как и обычные структуры динам. структуры состоят из полей, или членов структур. Кроме информационных полей они содержат поля- указатели на свой собственный тип структуры.
Динамическую структуру можно объявить: struct node {int info;stuct node *next;//указатель на структуру типа node};Список – формируется по принципу первым вошел – первым вышел, поэтому заголовочный элемент (head) всегда указывает на первый элемент списка. Для создания списка надо объявить структуру типа node или её прототип: typedef stuct node {int info; stuct node *next;} Node; typedef Node *Nodeptr;//указатель на структуру типа node; После этого объявляют указатель на начало списка, который иногда называют заголовком списка. Назовем его head и объявим: Nodeptr head = NULL; Нулевой указатель на начало списка явл. признаком того, что список пустой. До начала формирования первого элемента в списке следует выделить память под этот элемент, предварительно убелившись, что список пуст. П-р. if (head==NULL) {head=(Nodeptr)malloc(sizeoff(Node)); head->info=1;/*или другому значению*/ head->next= NULL;} Для добавления нового элемента всписок надо объявить указатель на текущий элемент р и выполнить следующие действия: Nodeptr p; //указатель на текущий элемент Nodeptr tail;//указатель на “ хвост очереди” if (head==NULL) {head=(NodePtr)malloc(sizeoff(Node)); head->info=1; head->next=NULL; p=(Nodeptr)malloc(sizeoff(Node)); p->next=head->next // в данном случае - NULL; head->next=p; tail=p;}