Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 98; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.009 с.) |
|||||||||||||||||||||||||||||||||||||||||||