Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Указатели на функции удобно использовать в тех случаях, когда функцию надо передать в другую функцию как параметр.
Пример. #include <iostream.h> #include <math.h> typedef float(*fptr)(float);//тип – указатель на функцию float root(fptr f, float a, float b, float e)//решение уравнения методом половинного деления //уравнение передается с помощью указателя на функцию {float x; do { x=(a+b)/2; if ((*f)(a)*f(x)<0)b=x; else a=x; } while((*f)(x)>e&&fabs(a-b)>e); return x; } float testf(float x) {return x*x-1;} void main() { float res=root(testf,0,2,0.0001); cout<<”\nX=”<<res; }
Ссылки на функцию Подобно указателю на функцию определяется и ссылка на функцию: тип_функции(&имя_ссылки)(параметры) инициализирующее_выражение; Пример. int f(float a,int b){... }//определение функции int(&fref)(float,int)=f;//определение ссылки Использование имени функции без параметров и скобок будет восприниматься как адрес функции. Ссылка на функцию является синонимом имени функции. Изменить значение ссылки на функцию нельзя, поэтому более широко используются указатели на функции, а не ссылки. Пример. #include <iostream.h> void f(char c) {cout<<”\n”<<c;} void main() { void (*pf)(char);//указатель на функцию void(&rf)(char);//ссылка на функцию f(‘A’);//вызов по имени pf=f;//указатель ставится на функцию (*pf)(‘B’);//вызов с помощью указателя rf(‘C’);//вызов по ссылке }
Типы данных, определяемые пользователем Переименование типов Типу можно задавать имя с помощью ключевого слова typedef: typedef тип имя_типа [размерность]; Примеры: typedef unsigned int UNIT; typedef char Msg[100]; Такое имя можно затем использовать также как и стандартное имя типа: UNIT a,b,c;//переменные типа unsigned int Msg str[10];// массив из 10 строк по 100 символов
Перечисления Если надо определить несколько именованных констант таким образом, чтобы все они имели разные значения, можно воспользоваться перечисляемым типом: enum [имя_типа] {список констант}; Константы должны быть целочисленными и могут инициализироваться обычным образом. Если инициализатор отсутствует, то первая константа обнуляется, а остальным присваиваются значение на единицу большее, чем предыдущее. Пример: Enum Err{ErrRead, ErrWrite, ErrConvert); Err error; .... switch(error) { case ErrRead: ….. case ErrWrite: ….. case ErrConvert: ….. } Структуры Структура – это объединенное в единое целое множество поименованных элементов данных. Элементы структуры (поля) могут быть различного типа, они все должны иметь различные имена.
Форматы определения структурного типа следующие: 1. struct имя_типа //способ 1 { тип 1 элемент1; тип2 элемент2; ... }; Пример: struct Date//определение структуры { int day; int month; int year; }; Date birthday;//переменная типа Date 2) struct //способ 2 { тип 1 элемент1; тип2 элемент2; ... } список идентификаторов; Пример: struct { int min; int sec; int msec; }time_beg,time_end; В первом случае описание структур определяет новый тип, имя которого можно использовать наряду со стандартными типами. Во втором случае описание структуры служит определением переменных. 3) Структурный тип можно также задать с помощью ключевого слова typedef: Typedef struct //способ 3 { floar re; float im; }Complex; Complex a[100];//массив из 100 комплексных чисел. Инициализация структур. Для инициализации структур значения ее полей перечисляют в фигурных скобках. Примеры: 1. struct Student { char name[20]; int kurs; float rating; }; Student s={”Иванов”,1,3.5}; 2. struct { char name[20]; char title[30]; float rate; }employee={“Петров", “директор”,10000}; Работа со структурами Присваивание структур Для переменных одного и того же структурного типа определена операция присваивания. При этом происходит поэлементное копирование. Student ss=s; Доступ к элементам структур Доступ к элементам структур обеспечивается с помощью уточненных имен: Имя_структуры.имя_элемента employee.name – указатель на строку «Петров»; employee.rate – переменная целого типа со значением 10000 Пример: #include <iostream.h> void main() { struct Student { char name[30]; char group[10]; float rating; }; Student mas[35]; //ввод значений массива for(int i=0;i<35;i++) { cout<<”\nEnter name:”;cin>>mas[i].name; cout<<”\nEnter group:”;cin>>mas[i].group; cout<<”\nEnter rating:”;cin>>mas[i].rating; } cout<<”Raitng <3:”; for(i=0;i<35;i++) if(mas[i].name<3) cout<<”\n”<<mas[i].name; } Указатели на структуры Указатели на структуры определяются также как и указатели на другие типы. Student*ps; Можно ввести указатель для типа struct, не имеющего имени (способ 2): Struct { char *name; int age; } *person;//указатель на структуру При определении указатель на структуру может быть сразу же проинициализирован. Student *ps=&mas[0]; Указатель на структуру обеспечивает доступ к ее элементам 2 способами: 1.(*указатель).имя_элемента
2. указатель->имя_элемента cin>>(*ps).name; cin>>ps->title; Битовые поля Битовые поля – это особый вид полей структуры. При описании битового поля указывается его длина в битах (целая положительная константа). Пример: struct { int a:10; int b:14}xx,*pxx; .... xx.a=1; pxx=&xx; pxx->b=8;
Битовые поля могут быть любого целого типа. Они используются для плотной упаковки данных. Например, с их помощью удобно реализовать флажки типа «да» / «нет». Особенностью битовых полей является то, что нельзя получить их адрес. Размещение битовых полей в памяти зависит от компилятора и аппаратуры.
Объединения Объединение (union)- это частный случай структуры. Все поля объединения располагаются по одному и тому же адресу. Длина объединения равна наибольшей из длин его полей. В каждый момент времени в такой переменной может храниться только одно значение. Объединения применяют для экономии памяти, если известно, что более одного поля не потребуется. Также объединение обеспечивает доступ к одному участку памяти с помощью переменных разного типа. Пример union{ char s[10]; int x; }u1;
Рис.3. Расположение объединения в памяти И s, и x располагаются на одном участке памяти. Размер такого объединения будет равен 10 байтам.
Пример1: //использование объединений enum paytype{CARD,CHECK};//тип оплаты struct{ paytype ptype;//поле, которое определяет с каким полем объединения будет union{ char card[25]; long check; }; }info; switch (info.ptype) { case CARD:cout<<”\nОплата по карте:”<<info.card;break; case CHECK:cout<<”\nОплата чеком:”<<info.check;break; }
|
||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 33; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.231.106 (0.016 с.) |