КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Оператор gotoИспользуется для передачи управления внутри одной функции от одного оператора к другому, помеченному меткой. Метка формируется как имя переменной, т.е. метка начинается с буквы и может содержать в себе буквы цифры и некоторые знаки. Синтаксис: Не входить внутрь блока, условных операторов цикла. goto m1; ............. m1: .............
Пример: for (…) for (…) { if (условие ошибки) goto m1; ............. } ............ m1: ............
21. Вложенные циклы. Цикл называется вложенным, если находится в теле другого цикла.
Задача: из двух цифр сформировать всевозможные двузначные числа и расположить в порядке возрастания (матрица) int j, i; i=1; for (i=0; i<10; i++) { for (j=0; j<10; j++) cout<<i*10+j<<’ ‘; cout<<endl; } return 0; Нужно расписать вложенный цикл и показать, как он работает. Сначала фиксируется переменная во внешнем цикле. Проверяется условие. Если условие истинно, то идём в тело этого цикла. А в теле этого цикла есть внутренний цикл. Инициализация переменной внутреннего цикла, идём внутрь этого цикла, алгоритм обработки. Прокручивается внутренний цикл до конца. Потом выскакиваем во внешний цикл. Идёт коррекция, снова проверка условия, снова закручивается внутренний цикл от начала до конца.
Сумма произведений 22. Указатели и адреса: описание, инициализация и операции с указателями. Применение указателей при программировании. Указатель – это переменная, которая содержит адрес другой переменной соответствующего типа, или точнее говоря адрес первого байта памяти, выделенного под эту переменную. Зачем нужны указатели: · Применение указателей в некоторых случаях позволяет упростить алгоритм, повышает его эффективность. · Обращение к памяти через адрес осуществляется быстрее. · С помощью указателей эффективней управляем оперативной памятью. Существуют операции, которые позволяют резервировать или освобождать блоки памяти в процессе выполнения программы. – этот процесс называется управлением динамической памятью. · Обмен данными между различными функциями осуществляется эффективней, передача массивов и дополнительных результатов из функций возможна только через указатель.
Для работы с данными через адрес необходимо: 1) объявить указатель 2) положить в указатель правильный адрес 3) осуществить доступ к данному через адрес
Объявление указателя. Синтаксис: имя_типа*имя_ указателя; Пример: 1. int *p1; // переменная p1 объявлена как указатель на целый тип данных, т.е. она может содержать адрес любой переменной целого типа. 2. void *p3; // переменная p3 является указателем на тип void т.е. может содержать адрес любого типа. Инициализация указателей.Помещение в указатель правильного адреса. Имеются несколько способов инициализации: · в указатель помещаем адрес существующей переменной double *p1, a; // * относится только к p1 p1=& a; // & - амперсант, операция определения адреса по имени переменной · Инициализация указателя с помощью другого указателя, уже правильно инициализированного. char a, *p1, *p2; p1=&a; p2=p1; //нельзя присваивать указатели разного типа Указатель на тип void совместим с любым адресом void *p3; p3=(void*)p1; p3=(double*)p2; · В указатель помещаем адрес памяти, выделенной под данное динамически Способы выделения памяти под данные:
int *p1 = new int; - выделяется память под одну переменную целого типа int *p2 = new int(5); - выделяется память под одну переменную целого типа и туда помещается значение 5 int *p3 = new int[7]; - выделяется память под семь переменных целого типа, лежащих в памяти подряд
В нужном месте программы выделенную память обязательно нужно освободить delete p1; delete p2; delete[]p3; Операции над указателем. 1. Операция доступа к содержимому по адресу (операция разадресации) * - унарная. Пример: 1) int *p=new int;; *p = 7; // операция разадресации- значение по адресу pравно 7. 4. Два адреса можно сравнить с помощью операции отношения = =, ! =, <, < =, >, > =. 2. К указателю на соответствующий тип можно прибавить целое число m, при этом мы сместимся в памяти вперед на m элементов. Но мы должны быть уверены, что в памяти расположены m элементов подряд. 3. От указателя на соответствующий тип можно отнять целое число n, при этом мы сместимся в памяти назад на n элементов. 5. Можно найти разность между двумя указателями, и определить на каком расстоянии находится два объекта между собой. p-(p-4)=4
Задача. Выделить память под 3 данных типа int, находящихся в памяти подряд, присвоить значение 1,2,3. int *p; p = new int[5]; *p = 1; *(p+1) = 2; *(p+2) = 3; Указатель на константу: int a=98, b=20; const int *pa; pa=&a;// правильно *pa=10;// ошибка pa=&b;// правильно
Константный указатель: int a=9, int b=4; int* const pa=&a; *pa=11; pa=&b;// ошибка 23. Строки в языке С++: объявление (статически), инициализация, доступ к символам строки, стандартный цикл обработки. Строка – набор символов, завершающийся 0 символом. Адрес строки – адрес первого символа в строке. Со строкой работаем как с единым целым, при этом используется имя или адрес строки. Если хотим выполнить действие над строкой, как над единым целым – ищем функцию обработки строки.
|