Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Таким же образом можно привести классический пример суммирования элементов






 

#include < iostream.h>

#include < stdlib.h>

 

void MyFunc(double a,...) //Так объявляется функция с заранее неизвестным числом параметров

{

double *P=& a; //Взятие адреса у первого параметра

double sum=0; //Инициализация значения суммы в ноль

 

while (*P) //Пока встречаются параметры и параметр не равен 0

{

sum=sum+(*P); //Прибавляем к сумме то что взяли по адресу P

P++; //Адресная арифметика. Смена текущего адреса на следующий

}

 

 

cout< < sum< < endl; //Вывод результата на экран

}

 

void main()

{

system(" CLS");

MyFunc(100.0, 200.0, 300.0, 400.0, 0.0); //В функцию передается 4 параметра и пятый как идентификатор того, что параметры кончились

system(" PAUSE");

 

}

 

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

t; Даже если типы передаваемых параметров будут различны, то компилятор не выдаст ошибки, но ошибки не выведется только потому что если компилятор видит эти три точки на месте параметров, то он отключает проверку типов. На самом деле легко увидеть эффект небезопасности работы с функцией, в которой указано, что будет более одного параметра, если первый параметр объявить например как int, (соответственно указатель на первый параметр как int), а во время передачи в функцию написать число с точкой (например 1.0 запустить и потом 11.0 и запустить). Т.е. если требуется передать параметры других типов, то их все нужно дописать перед списком предполагаемых неизвестных.

 

 

СТРУКТУРЫ

Структуры в С++ есть совокупность переменных, объединенных под одним именем.
Другими словами можно сказать так.
Структуры помогают группировать связанные данные под одним именем. С помощью структуры можно создать некоторую составную переменную, содержащую в себе набор некоторых параметров, после чего эта переменная будет равносильна новому типу данных.

 

Переменные, входящие в состав струк­туры, называются полями структуры.

 

Код С++ структуры Объявление структуры

struct TPoint //Объявили новую структуру TPoint.

{

int x; //Первый параметр

int y; //Второй параметр

}; //После описания структуры ставят точку с запятой

 

void main()

{

TPoint O; //Объявили переменную O типа TPoint

}

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

Код С++ структуры Обращение к структуре

 

#include < conio.h>

#include < iostream.h>

struct TPoint //Объявили новую структуру TPoint.

{

int x; //Первый параметр

int y; //Второй параметр

}; //После описания структуры ставят точку с запятой

 

void main()

{

clrscr();

TPoint O; //Объявили переменную O типа TPoint

O.x=30; //Присвоили первому параметру значение

O.y=100; //Присвоили второму параметру значение

getch();

}

В этом коде была объявлена переменная O тип данных которой соответствует структуре TPoint
У структуры TPoint было объявлено 2 параметра. (x, y). При обращении к O программист должен обратиться к определенному параметру из структуры к которой О относится. Такое обращение происходит через точку






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.