Студопедия Главная Случайная страница Обратная связь

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

Приведите синтаксис объявления функции





тип возвращаемого значения имя функции (список параметров через запятую);

тип возвращаемого значения область действия:: имя функции (список параметров);

(пример: int cube(int x);)

<тип результата> [<область действия>::]<имя функции> (<типы параметров (через запятую)>);

19.Приведите синтаксис определения функции. Можно ли определить вложенные функции? Если да, то каким образом и какова допустимая глубина вложенности?

тип возвращаемого значения имя функции (список параметров) {тело функции};

тип возвращаемого значения область действия:: имя функции (список параметров) {тело функции};

Нельзя.

20. Укажите назначение классов памяти для переменных. Как транслятор определяет класс памяти для переменной?

Класс памяти – это время, в течении которого переменная существует в памяти компьютера.

Помогают компилятору, указывая в какую память стоит помещать данную переменную, для улучшения эффективности программы.

Они используются для того чтобы указывать область видимости и действия переменных, а также того, будут ли они динамическими (будет ли их адрес меняться в процессе выполнения программы).
К динамическим относятся auto и register.
• auto. Этот спецификатор автоматического класса памяти указывает на то, что объект располагает-ся в локальной (или автоматически распределяемой) памяти. Он используется в операторах объявле-ния в теле функций, а также внутри блоков операторов. Объекты, имена которых объявляются со спецификатором auto, размещаются в локальной памяти непосредственно перед началом выполнения функции или блока операторов. При выходе из блока или при возвращении из функции (о механизмах вызова функций и возвращения из них речь ещё впереди), соответствующая область локальной памяти освобождается и все ранее размещённые в ней объекты уничтожаются. Таким образом спецификатор влияет на время жизни объекта (это время локально). Спецификатор auto используется редко, поскольку все объекты, определяемые непосредственно в теле функции или в блоке операторов и так по умолчанию располагаются в локальной памяти. Вне блоков и функций этот специфика-тор не используется.
• register. Ещё один спецификатор автоматического класса памяти. Применяется к объектам, по умолчанию располагаемым в локальной памяти. Представляет из себя "ненавязчивую просьбу" к транслятору (если это возможно) о размещении значений объектов, объявленных со спецификатором register в одном из доступных регистров, а не в локальной памяти. Если по какой-либо причине в мо-мент начала выполнения кода в данном блоке операторов регистры оказываются занятыми, трансля-тор обеспечивает с этими объектами обращение, как с объектами класса auto. Очевидно, что в этом случае объект располагается в локальной области памяти.
К статическим относятся static и extern.
• static. Спецификатор внутреннего статического класса памяти. Применяется только(!) к именам объектов и функций. В C++ этот спецификатор имеет два значения. Первое означает, что определяе-мый объект располагается по фиксированному адресу. Тем самым обеспечивается существование объекта с момента его определения до конца выполнения программы. Второе значение означает ло-кальность. Объявленный со спецификатором static локален в одном программном модуле (то есть, недоступен из других модулей многомодульной программы) или в классе (о классах - позже). Может использоваться в объявлениях вне блоков и функций. Также используется в объявлениях, располо-женных в теле функций и в блоках операторов.
• extern. Спецификатор внешнего статического класса памяти. Обеспечивает существование объекта с момента его определения до конца выполнения программы. Объект, объявленный со спецификато-ром extern доступен во всех модулях программы, то есть глобален.

 

Транслятор определяет класс памяти автоматически. СТР.203

21. Можно ли описать несколько переменных одного типа в одном определении? Можно ли описать несколько переменных разных типов в одном определении? Можно ли инициализировать несколько переменных в одном операторе?

Можно описать несколько переменных одного типа в одном определении. (int a,b;)

Можно описать несколько переменных разного типа в одном определенни. (int *p, d;)

Можно инициализировать несколько переменных в одном операторе.(int x,q; x = q = 1;)

22. Как используется модификатор const для переменных?

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

23. Может ли тип инициализирующего выражения не совпадать с типом определяемой переменной?

Да, может. int k = ‘a’;

24. Что такое «область действия идентификатора»? Как она определяется?

Идентификаторы – имена, даваемые переменным и другим программы.

Область действия идентификатора - это часть программы, в которой на идентификатор можно ссылаться. Существуют четыре области действия идентификатора:
1) область действия функция;
2) область действия файл;
3) область действия блок;
4) область действия прототип функции.
Идентификатор, объявленный вне любой функции (на внешнем уровне), имеет область действия файл. Такой идентификатор «известен» всем функциям от точки его объявления до конца файла. Глобальные переменные, описания функции, прототипы функции, находящиеся вне функции - все они имеют областью действия файл.

25. Доступна ли локальная переменная во вложенных блоках? Если да, как получить к ней доступ? Как получить доступ к глобальной переменной, если ее идентификатор совпадает с локальной переменной?

Локальная переменная – переменные, определяемые внутри функции (их область видимости ограничивается этой функцией).

Да, доступна. ОБЪЯСНЕНИЕ!!!

Доступ к глобальной переменно, если ее идентификатор совпадает с локальной переменной можно получить с помощью::

int i =::i; // локальной i присваивается значение глобальной i

26. Какую переменную называют глобальной? Как определяется область действия глобальной переменной?

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

27. Совпадает ли область видимости переменной с областью действия?

Область действия переменной совпадает с областью видимости переменной, если она не перекрывается локальной для вложенного блока переменной с таким же именем.

28. Как используется операция::?

Операция с оператором:: дает внутри блока (функции) доступ к глобальной переменной (только к глобальной) при наличии локальной «тезки»

int i =::i; // локальной i присваивается значение глобальной i

Символ:: - это символ является знаком операции глобального доступа.

29. Как инициализировать статические переменные?

static float a = 0; // инициализация статических переменных при первом вызове

static int = 5;

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

30. Определите назначение операций! ~ & %

! – логическое отрицание

~ - побитовое отрицание (изменяет 0 на 1 и 1 на 0)

& - побитовое «и» (поразрядное сложение И) – биты результата устанавливаются в 1, если соответствующие биты обоих операндов равны 1

% - остаток от деления

31. Определите назначение операций / << ^

/ - деление (нацело или дробно, смотря что и на что делят)

<< - побитовый сдвиг влево (ну еще перегружено для записи в поток)

^ - поразрядное исключающее ИЛИ (Биты результата устанавливаются в 1, если соответствующий бит только одного из операндов равен 1.)

32. Определите назначение операций >> || &&;

>> - побитовый сдвиг вправо) (ну ещё перегружено для чтения из потока)

|| - логическое ИЛИ

&& - логическое И

33. Определите назначение операций?, (тип)

? - краткая условия: (условие)? (выражение, которое вернёт, если верно): (выражение, которое вернёт, если ложь). Можно записать модуль b = abs(a) ó b = (a < 0)? –a: a

, - задание последовательности.
Это бинарный оператор, то есть, ему нужны два операнда. Обрабатываются операнды слева направо. Результат работы - второй операнд.
Например, если вы напишете i = (1,2); то в переменной i окажется значение 2. Разумеется, можно поставить в выражение и несколько таких операторов.
Так, строка i = (1, 3, -4); зашлет в i значение -4. Обратите внимание на круглые скобки - они, как обычно, помогают бороться с приоритетами операций, и в данном случае они совершенно необходимы.
Если вы попытаетесь написать, например, так: i = 1, 3, -4; то с удивлением обнаружите, что переменная i стала равна единице, а не -4. А все дело в том, что у оператора присваивания приоритет повыше, так что написать последнюю строку все равно, что написать result = ((i=1), 3, -4); а потом забыть про result и использовать значение i.
Зачем понадобился такой необычный оператор? Прежде всего, есть в программах на С такие места, куда можно поставить только одно выражение, а надо ставить несколько. Вот в таких случаях и пишут что-нибудь в таком духе:
f(((i=1), (j=2), i*j)));
То, что вы видите - вызов функции с одним аргументом. В конечном итоге, в качестве аргумента функция получит i*j. И правила языка не нарушены, и несколько выражений стоит. Эта же строка показывает и второе полезное применение этого оператора - мы прямо в вызове функции присвоили новые значения переменным i и j, и только после этого сосчитали значение аргумента i*j; То есть, с помощью оператора запятая можно гарантировать, что обработаются все операнды, причем обработаются они последовательно - слева направо. Еще один пример, чтобы вам этот оператор получше запомнился. В строке программы
f(), g(), h(); последовательно будут вызваны все три функции f(), g(), h();

(тип) - это оператор приведение, позволяющий переменную 1 типа привести к другому типу например double d = 2.0; int i = (int)d;

34. Укажите особенности выполнения операций % <<;

% - работает стандартно только для целых, и в математике остаток от деления ­-3 на 2 будет 1, а (-3) % 2 будет равно -1

<<; – выполняется намного быстрее, чем операция умножения. При этом операнды должны быть целыми.

35. Можно ли сравнивать указатели?

int x=100;

double y;

int* p=&x;

if (p!=NULL) x=y;







Дата добавления: 2015-04-19; просмотров: 987. Нарушение авторских прав; Мы поможем в написании вашей работы!




Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...


Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Влияние первой русской революции 1905-1907 гг. на Казахстан. Революция в России (1905-1907 гг.), дала первый толчок политическому пробуждению трудящихся Казахстана, развитию национально-освободительного рабочего движения против гнета. В Казахстане, находившемся далеко от политических центров Российской империи...

Виды сухожильных швов После выделения культи сухожилия и эвакуации гематомы приступают к восстановлению целостности сухожилия...

КОНСТРУКЦИЯ КОЛЕСНОЙ ПАРЫ ВАГОНА Тип колёсной пары определяется типом оси и диаметром колес. Согласно ГОСТ 4835-2006* устанавливаются типы колесных пар для грузовых вагонов с осями РУ1Ш и РВ2Ш и колесами диаметром по кругу катания 957 мм. Номинальный диаметр колеса – 950 мм...

Принципы резекции желудка по типу Бильрот 1, Бильрот 2; операция Гофмейстера-Финстерера. Гастрэктомия Резекция желудка – удаление части желудка: а) дистальная – удаляют 2/3 желудка б) проксимальная – удаляют 95% желудка. Показания...

Ваготомия. Дренирующие операции Ваготомия – денервация зон желудка, секретирующих соляную кислоту, путем пересечения блуждающих нервов или их ветвей...

Билиодигестивные анастомозы Показания для наложения билиодигестивных анастомозов: 1. нарушения проходимости терминального отдела холедоха при доброкачественной патологии (стенозы и стриктуры холедоха) 2. опухоли большого дуоденального сосочка...

Studopedia.info - Студопедия - 2014-2025 год . (0.008 сек.) русская версия | украинская версия