Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
четные.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
72 Кб
Скачать

8) Использование указателей на структуры

Структура – тип данных, задаваемый пользователем. 

Для получения адреса структурной переменной следует поместить оператор & перед именем структуры. Пусть имеется следующий фрагмент

struct wer { float balance; char name[80]; } person; struct wer *p; /* объявление указателя на структуру */ тогда p = &регson; помещает адрес структуры person в указатель р.

Для доступа к членам структуры с помощью указателя на структуру следует использовать оператор "стрелка". Оператор "стрелка", ->, образован из знака "минус" и символа "больше". Например, для доступа к члену balance с помощью p следует написать: p->balance

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

10) Условный оператор

Есть два вида условных операторов

if ( выражение ) оператор

if ( выражение ) оператор else оператор

В обоих случаях вычисляется выражение, и если оно не ноль, то выполняется первый подоператор. Во втором случае второй подоператор выполняется, если выражение есть 0. Как обычно, неоднозначность "else" разрешается посредством того, что else связывается с последним встреченным if, не имеющим else.

Оператор switch

Оператор switch вызывает передачу управления на один из нескольких операторов в зависимости от значения выражения. Он имеет вид

switch ( выражение ) оператор

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

case константное_выражение :

где константное выражение должно иметь тот же тип что и выражение- переключатель; производятся обычные арифметические преобразования. В одном операторе switch никакие две константы, помеченные case, не могут иметь одинаковое значение

Может также быть не более чем один префикс оператора вида

default :

Когда выполнен оператор switch, проведено вычисление его выражения и сравнение его с каждой case константой. Если одна из констант равна значению выражения, то управление передается на выражение, следующее за подошедшим префиксом case. Если никакая case константа не соответствует выражению, и есть префикс default, то управление передается на выражение, которому он предшествует. Если нет соответствующих вариантов case и default отсутствует, то никакой из операторов в операторе switch не выполняется.

Префиксы case и default сами по себе не изменяют поток управления, который после задержки идет дальше, перескакивая через эти префиксыОбычно зависящий от switch оператор является составным. В голове этого оператора могут стоять описания, но инициализации автоматических и регистровых переменных являются безрезультатными

12) Указатели на массивы. Указатели на строки.

Массивы в С++ могут задаваться при помощи двойных указателей.

Переменная, являющаяся указателем на указателе должна быть описана следующим образом. Это выполняется путем помещения двух звездочек перед именем. Например, следующее объявление сообщается компилятору, что newbalance - это указатель на указатель типа float: float **newbalance; Важно понимать, что newbalance - это не указатель на число с плавающей точкой, а указатель на указатель на вещественное число.

int **a;//объявление двумерного массива с помощью указателя

a=new int*[n];//

for(i=0;i<n;i++)

{ a[i]=new int[n];}

Чтобы объявить указатель на символьную строку, функция просто предваряет имя переменной звездочкой, как показано ниже:

void some_function(char *string);

Звездочка, которая предваряет имя переменной, указывает C++, что переменная будет хранить адрес памяти — указатель. Следующая программа использует указатель на символьную строку внутри функции show_string для вывода содержимого строки по одному символу за один раз:

#include <iostream.h>

void show_string(char *string)

{ while (*string != '\0')

{ cout<<*string;

string++; }}

void main(void)

{ show_string( "Hello world!!!"); }

Обратим внимание на цикл while внутри функции show_slring. Условиеwhile (*string != '\0') проверяет, не является ли текущий символ, указываемый с помощью указателя string, символом Нуль, который определяет последний символ строки. Если символ не Нуль, цикл выводит текущий символ с помощью cout. Затем оператор string++;увеличивает указатель siring таким образом, что он указывает на следующий символ строки. Когда указатель string указывает на символ NULL, функция уже вывела строку и цикл завершается.

14) Формальные и фактические параметры. Массивы в качестве параметров. Аргумент типа void.

Формальные параметры подпрограммы указывают, с какими аргументами следует обращаться к этой подпрограмме (количество аргументов, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка, разбитого на группы. Разделителем групп является знак точка с запятой (;). В каждую группу  включаются  параметры одного типа, принадлежащие к одной  категории.

Все формальные параметры можно разбить на четыре категории:

  • параметры-значения;

  • параметры-переменные;

  • параметры-константы ;

  • параметры-процедуры и параметры-функции.

Для каждого формального параметра следует указать имя и, как правило, тип, а в случае параметра-переменной или параметра-константы - его категорию. Имена параметров могут быть любыми, в том числе и совпадать с именами объектов программы. Необходимо лишь помнить, что в этом случае объект основной программы с таким именем становится недоступным для непосредственного использования подпрограммой. Тип формального параметра может быть практически любым, однако в заголовке подпрограммы нельзя вводить новый тип. 

Основной вариант использования массива в качестве параметра подпрограммы

состоит в том, что в заголовке подпрограммы может быть указан только такой массив,

тип которого описан заранее в разделе Type программы.

Из всех возможных способов передачи в подпрограмму фактических параметров

не рекомендуется использование массивов в качестве параметров-

значений. Причина известна: для таких параметров при выполнении подпрограммы во

временно выделяемой области памяти создаются их копии, что в случае массивов влечёт

весьма значительные дополнительные затраты памяти

В соответствии со стандартом ANSI С ключевое слово void применяется для явного указания на отсутствие аргументов функции. В C++ указывать слово void не обязательно, хотя данное соглашение довольно широко используется. В следующем примере создается функция vout( ) , которая не получает аргументов и не возвращает никаких значений.

#include <iostream.h>

#include <math.h>

void vout (void) ;

int main() { cout<<" Этa программа вычисляет квадратный корень числа "<<endl;

vout () ;

return (0); }

void vout(void) { int i = 12345; double d; d = sqrt(i);

cout<<" Квадратный корень числа "<<i<<"равен"<< d<<endl; }