﻿<?php
echo "<p class=bmenu><span class=MsoHyperlink><a href=\"#_Toc219967920\">Глава 2\n";
echo "Описания и Константы<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'>__ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>48</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967921\">2.1 Описания<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>48</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967922\">2.1.1\n";
echo "Область Видимости<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>49</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967923\">2.1.2\n";
echo "Объекты и Адреса (Lvalue)<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>51</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967924\">2.1.3 Время\n";
echo "Жизни<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>51</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967925\">2.2 Имена<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>52</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967926\">2.3 Типы<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>53</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967927\">2.3.1\n";
echo "Основные Типы<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>53</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967928\">2.3.2\n";
echo "Неявное Преобразование Типа<span style='color:windowtext;display:none;\n";
echo "text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>55</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967929\">2.3.3\n";
echo "Производные Типы<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>55</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967930\">2.3.4 Тип\n";
echo "void<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>56</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967931\">2.3.5\n";
echo "Указатели<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>57</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967932\">2.3.6\n";
echo "Вектора<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>58</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967933\">2.3.7\n";
echo "Указатели и Вектора<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>60</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967934\">2.3.8\n";
echo "Структуры<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>61</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967935\">2.3.9\n";
echo "Эквивалентность типов<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>63</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967936\">2.3.10 Ссылки<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>64</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967937\">2.3.11\n";
echo "Регистры<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>67</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967938\">2.4 Константы<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>67</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967939\">2.4.1 Целые\n";
echo "Константы<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>67</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967940\">2.4.2\n";
echo "Константы с Плавающей Точкой<span style='color:windowtext;display:none;\n";
echo "text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>68</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967941\">2.4.3\n";
echo "Символьные Константы<span style='color:windowtext;display:none;text-decoration:\n";
echo "none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>68</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967942\">2.4.4 Строки<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>69</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967943\">2.4.5 Ноль<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>70</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967944\">2.4.6 Const<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>71</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967945\">2.4.7\n";
echo "Перечисления<span style='color:windowtext;display:none;text-decoration:none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>72</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967946\">2.5 Экономия Пространства<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>73</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967947\">2.5.1 Поля<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>73</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><a href=\"#_Toc219967948\">2.5.2 Объединения<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'> </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>74</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967949\">2.6 Упражнения<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>76</span></a></span></span></p>\n";
echo "\n";
echo "<h1><a name=\"_Toc219967920\">Глава 2 Описания и Константы</a></h1>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:85.8pt;margin-bottom:.0001pt;text-autospace:none'>Совершенство\n";
echo "достигается только к моменту краха.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:297.0pt;text-autospace:none'>- С.Н. Паркинсон</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В этой главе описаны основные типы (char, int,\n";
echo "float и т.д.) и основные способы построения из них новых типов (функ­ций,\n";
echo "векторов, указателей и т.д.). Имя вводится в программе посредством описания,\n";
echo "которое задает его тип и, возможно, на­чальное значение. Даны понятия описания,\n";
echo "определения, области видимости имен, времени жизни объектов и типов.\n";
echo "Описываются способы записи констант в С++, а также способы определения\n";
echo "символических констант. Примеры просто демонстрируют харак­терные черты языка.\n";
echo "Более развернутый и реалистичный пример приводится в следующей главе для\n";
echo "знакомства с выражениями и операторами языка С++. Механизмы задания типов,\n";
echo "определяемых пользователем, с присоединенными операциями представлены в Главах\n";
echo "4, 5 и 6 и здесь не упоминаются.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967921\">2.1 Описания</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Прежде чем имя (идентификатор) может быть\n";
echo "использовано в С++ программе, он должно быть описано. Это значит, что надо\n";
echo "задать его тип, чтобы сообщить компилятору, к какого вида сущностям относится имя.\n";
echo "Вот несколько примеров, иллюстрирую­щих разнообразие описаний:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char ch;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int count = 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* name = &quot;Bjarne&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct complex (* float re, im; *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>complex cvar;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>extern complex sqrt(complex);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>extern int error_number;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>typedef complex point;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>float real(complex* p) (* return p-&gt;re; *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const double pi = 3.1415926535897932385;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>struct user;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Как можно видеть из этих примеров, описание может\n";
echo "делать больше чем просто ассоциировать тип с именем. Большинство описаний\n";
echo "являются также определениями то есть они также опре­деляют для имени сущность,\n";
echo "к которой оно относится. Для ch, count и cvar этой сущностью является\n";
echo "соответствующий объем памяти, который должен использоваться как переменная -\n";
echo "эта память будет выделена. Для real это заданная функция. Для constant pi это\n";
echo "значение 3.1415926535897932385. Для complex этой сущностью является новый тип.\n";
echo "Для point это тип complex, поэтому point становится синонимом complex. Только описания</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>extern complex sqrt(complex);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>extern int error_number;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>struct user;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>не являются одновременно определениями. Это\n";
echo "означает, что объект, к которому они относятся, должен быть определен где-то\n";
echo "еще. Код (тело) функции sqrt должен задаваться неким другим описанием, память\n";
echo "для переменной error_number типа int должна выделяться неким другим описанием,\n";
echo "и какое-то другое описание типа user должно определять, что он из себя предс­тавляет.\n";
echo "В С++ программе всегда должно быть только одно опре­деление каждого имени, но\n";
echo "описаний может быть много, и все описания должны согласовываться с типом\n";
echo "объекта, к которому они относятся, поэтому в этом фрагменте есть две ошибки:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int count;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int count;                                              // </span>ошибка<span\n";
echo "lang=EN-US>: </span>переопределение</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>extern int error_number;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>extern int error_number; //\n";
echo "ошибка: несоответствие типов</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>а в этом - ни одной (об\n";
echo "использовании extern см.  <span lang=EN-US>#4.2):</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>extern int error_number;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>extern int\n";
echo "error_number;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Некоторые описания задают &quot;значение&quot; для\n";
echo "сущностей, ко­торые они определяют:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct complex (* float re, im; *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>typedef complex point;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>float real(complex* p) (* return p-&gt;re *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>const double pi\n";
echo "= 3.1415926535897932385;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Для типов, функций и констант &quot;значение&quot;\n";
echo "неизменно. Для неконстантных типов данных начальное значение может впоследс­твии\n";
echo "изменяться:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int count = 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* name = &quot;Bjarne&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>//...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>count = 2;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>name =\n";
echo "&quot;Marian&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Из всех определений только</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>char ch;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>не задает значение.  Всякое описание, задающее значение, является\n";
echo "определением.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967922\">2.1.1 Область Видимости</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Описание вводит имя в области видимости. То есть,\n";
echo "имя может использоваться только в определенной части программы. Для имени,\n";
echo "описанного в функции (такое имя часто называют ло­кальным), эта область\n";
echo "видимости простирается от точки описа­ния до конца блока, в котором появилось\n";
echo "описание. Для имени не в функции и не в классе (называемого часто глобально\n";
echo "види­мым именем) область видимости простирается от точки описания до конца\n";
echo "файла, в котором появилось описание. Описание имени в блоке может скрывать\n";
echo "(прятать) описание во внутреннем блоке или глобальное имя. Это значит, что\n";
echo "можно переопределять имя внутри блока для ссылки на другой объект. После выхода\n";
echo "из блока имя вновь обретает свое прежнее значение. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int x;                             //\n";
echo "глобальное x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>f() (*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>int x;                   //\n";
echo "локальное x прячет глобальное x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>x = 1;                 //\n";
echo "присвоить локальному x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>int x; //\n";
echo "прячет первое локальное x</p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'>x = 2; // присвоить второму локальному x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>x = 3;                 //\n";
echo "присвоить первому локальному x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int* p = &amp;x;   // взять\n";
echo "адрес глобального x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Сокрытие имен неизбежно при написании больших\n";
echo "программ. Однако читающий человек легко может не заметить, что имя скрыто, и\n";
echo "некоторые ошибки, возникающие вследствие этого, очень трудно обнаружить,\n";
echo "главным образом потому, что они ред­кие. Значит сокрытие имен следует\n";
echo "минимизировать. Использова­ние для глобальных переменных имен вроде i или x\n";
echo "напрашивает­ся на неприятности.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>С помощью применения операции разрешения области видимости\n";
echo ":: можно использовать скрытое глобальное имя. Нап­ример:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int x;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>f()</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>int x = 1; //\n";
echo "скрывает глобальное x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>::x = 2;   //\n";
echo "присваивает глобальному x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>Но возможности использовать\n";
echo "скрытое локальное имя нет.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Область видимости имени начинается в точке\n";
echo "описания. Это означает, что имя можно использовать даже для задания его\n";
echo "собственного значения. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int x;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>f()</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>int x = x; //\n";
echo "извращение</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Это не является недопустимым, хотя и бессмысленно,\n";
echo "и компилятор предупредит, что x &quot;used before set&quot; (&quot;использова­но\n";
echo "до того, как задано&quot;), если вы попробуете так сделать. Можно, напротив, не\n";
echo "применяя операцию ::, использовать одно имя для ссылки на два различных объекта\n";
echo "в блоке. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int x;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>f()                                   //\n";
echo "извращение</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>int y = x; \n";
echo "// глобальное x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>int x = 22;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>y = x;                    //\n";
echo "локальное x</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Переменная y инициализируется значением глобального\n";
echo "x, 11, а затем ему присваивается значение локальной переменной x, 22.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Имена параметров функции считаются описанными в самом\n";
echo "внешнем блоке функции, поэтому</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>f(int x)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>int x; //\n";
echo "ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>содержит ошибку, так как x определено дважды в\n";
echo "одной и той же области видимости.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967923\">2.1.2 Объекты и Адреса (Lvalue)</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Можно назначать и использовать переменные, не\n";
echo "имеющие имен, и можно осуществлять присваивание выражениям странного вида\n";
echo "(например, *p[a+10]=7). Следовательно, есть потребность в имени &quot;нечто в\n";
echo "памяти&quot;. Вот соответствующая цитата из спра­вочного руководства по С++:\n";
echo "&quot;Объект есть область памяти. lvalue есть выражение, ссылающееся на\n";
echo "объект&quot; (#с.5). Слово &quot;lvalue&quot; первоначально было придумано для\n";
echo "значения &quot;нечто, что может стоять в левой части присваивания&quot;. Однако\n";
echo "не вся­кое lvalue можно использовать в левой части присваивания; бы­вают\n";
echo "lvalue, ссылающиеся на константу (см. #2.4).</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967924\">2.1.3 Время Жизни</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-align:justify;text-indent:33.0pt;text-autospace:\n";
echo "none'>Если программист не указал иного, то объект создается, когда встречается\n";
echo "его описание, и уничтожается, когда его имя выходит из области видимости,\n";
echo "Объекты с глобальными именами создаются и инициализируются один раз (только) и\n";
echo "&quot;живут&quot; до завершения программы. Объекты, определенные описанием с\n";
echo "клю­чевым словом static, ведут себя так же. Например*:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>--------------------</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>* Команда #include &lt;stream.h&gt; была выброшена\n";
echo "из примеров в этой главе для экономии места. Она необходима в примерах,\n";
echo "производящих вывод, чтобы они были полными. (прим. автора)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int a = 1;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>void f()</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>(*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>int b = 1;                                //\n";
echo "инициализируется при каждом</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:165.0pt;margin-bottom:.0001pt;text-autospace:none'>//  вызове\n";
echo "f()</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>static int c\n";
echo "= 1;  // инициализируется только один раз</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot; a = &quot; &lt;&lt; a++</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:72.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&lt;&lt; &quot; b = &quot; &lt;&lt; b++</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:72.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&lt;&lt; &quot; c = &quot; &lt;&lt; c++ &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>*)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>main()</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (a &lt; 4) f();</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>производит вывод</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>a = 1 b = 1 c\n";
echo "= 1</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a = 2 b = 1 c = 2</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>a = 3 b = 1 c =\n";
echo "3</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Не инициализированная явно статическая (static) перемен­ная неявно\n";
echo "инициализируется нулем.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>С помощью операций new и delete программист может также\n";
echo "создавать объекты, время жизни которых управляется непосредс­твенно, см.\n";
echo "#3.2.4.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967925\">2.2 Имена</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Имя (идентификатор) состоит из последовательности\n";
echo "букв и цифр. Первый символ должен быть буквой. Символ подчерка _ считается\n";
echo "буквой. С++ не налагает ограничений на число симво­лов в имени, но некоторые\n";
echo "части реализации находятся вне ве­дения автора компилятора (в частности,\n";
echo "загрузчик), и они, к сожалению, такие ограничения налагают. Некоторые среды\n";
echo "выпол­нения также делают необходимым расширить или ограничить набор символов,\n";
echo "допустимых в идентификаторе. Расширения (например, при допущении в именах\n";
echo "символа $) порождают непереносимые программы. В качестве имени не могут\n";
echo "использоваться ключевые слова С++ (см. #с.2.3). Примеры имен:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>hello this_is_a_most_unusially_long_name</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:147.8pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>DEFINED foO bAr u_name HorseSense var0 var1 CLASS _class ___</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Примеры последовательностей символов, которые не могут\n";
echo "использоваться как идентификаторы:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo " lang=EN-US>012 a</span><span lang=EN-US> fool $sys class 3var</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>pay.due foo~bar\n";
echo ".name if</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Буквы в верхнем и нижнем регистрах считаются\n";
echo "различными, поэтому Count и count - различные имена, но вводить имена, лишь\n";
echo "незначительно отличающиеся друг от друга, нежелательно. Имена, начинающиеся с\n";
echo "подчерка, по традиции используются для специальных средств среды выполнения,\n";
echo "поэтому использовать такие имена в прикладных программах нежелательно.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Во время чтения программы компилятор всегда ищет наибо­лее\n";
echo "длинную строку, составляющую имя, поэтому var10 - это од­но имя, а не имя var,\n";
echo "за которым следует число 10, и elseif - одно имя, а не ключевое слово else,\n";
echo "после которого стоит клю­чевое слово if.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967926\">2.3 Типы</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Каждое имя (идентификатор) в С++ программе имеет ассоци­ированный\n";
echo "с ним тип. Этот тип определяет, какие операции мож­но применять к имени (то\n";
echo "есть к объекту, на который оно ссылается), и как эти операции интерпретируются.\n";
echo "Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int error number;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>float\n";
echo "real(complex* p);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Поскольку error_number описано как int, его можно\n";
echo "прис­ваивать, использовать в арифметических выражениях и т.д. Тог­да как\n";
echo "функция real может вызываться с адресом complex в ка­честве параметра. Можно\n";
echo "взять адрес любого из них. Некоторые имена, вроде int и complex, являются\n";
echo "именами типов. Обычно имя типа используется в описании для спецификации другого\n";
echo "имени. Единственные отличные от этого действия над именем ти­па - это sizeof\n";
echo "(для определения количества памяти, которая требуется для хранения объекта\n";
echo "типа) и new (для размещения объекта типа в свободной памяти). Например<span\n";
echo "lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>main()</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int* p = new int;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;sizeof(int) = &quot; &lt;&lt; sizeof(int)\n";
echo "&quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Имя типа можно также использовать для задания\n";
echo "явного преобразования одного типа в другой, например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>float f;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* p;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>//...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>long ll = long(p); // </span>преобразует<span lang=EN-US> p </span>в<span\n";
echo "lang=EN-US> long</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int i = int(f);                            //\n";
echo "</span>преобразует<span lang=EN-US> f </span>в<span lang=EN-US> int</span></p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967927\">2.3.1 Основные Типы</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В С++ есть набор основных типов, которые\n";
echo "соответствуют наиболее общим основным единицам памяти компьютера и наиболее\n";
echo "общим основным способам их использования:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>short int</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>long int</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>для представления целых различных\n";
echo "размеров,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>float</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>double</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>для представления чисел с плавающей\n";
echo "точкой,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned char</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned short int</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned int</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>unsigned long\n";
echo "int</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>для представления беззнаковых целых, логических\n";
echo "значе­ний, битовых массивов и т.п. Для большей компактности записи можно\n";
echo "опускать int в комбинациях из нескольких слов, что не меняет смысла. Так, long\n";
echo "означает long int, и unsigned тип означает тип unsigned int. В общем, когда в\n";
echo "описании опущен тип, он предполагается int. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const a = 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>static x;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>все определяют объект типа int.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Целый тип char наиболее удобен для хранения и\n";
echo "обработки символов на данном компьютере, обычно это 8-битовый байт. Размеры\n";
echo "объектов С++ выражаются в единицах размера char, поэ­тому по определению\n";
echo "sizeof(char)==1. В зависимости от аппа­ратного обеспечения char является\n";
echo "знаковым или беззнаковым целым. Тип unsigned char, конечно, всегда беззнаковый,\n";
echo "и при его использовании получаются более переносимые программы, но из-за\n";
echo "применения его вместо просто char могут возникать зна­чительные потери в\n";
echo "эффективности.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Причина того, что предоставляется более чем один целый\n";
echo "тип, более чем один беззнаковый тип и более чем один тип с плавающей точкой, в\n";
echo "том, чтобы дать возможность программисту воспользоваться характерными особенностями\n";
echo "аппаратного обес­печения. На многих машинах между различными разновидностями\n";
echo "основных типов существуют значительные различия в потребнос­тях памяти,\n";
echo "временах доступа к памяти и временах вычислений. Зная машину обычно легко,\n";
echo "например, выбрать подходящий тип для конкретной переменной. Написать\n";
echo "действительно переносимую программу нижнего уровня сложнее. Вот все, что\n";
echo "гарантируется относительно размеров основных типов:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:19.8pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>1==sizeof(char)&lt;=sizeof(short)&lt;= sizeof(int)&lt;=sizeof(long)\n";
echo "sizeof(float)&lt;=sizeof(double)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Однако обычно разумно предполагать, что в char могут\n";
echo "храниться целые числа в диапазоне 0..127 (в нем всегда могут храниться символы\n";
echo "машинного набора символов), что short и int имеют не менее 16 бит, что int\n";
echo "имеет размер, соответствующий целой арифметике, и что long имеет по меньшей\n";
echo "мере 24 бита. Предполагать что-либо помимо этого рискованно, и даже эти эм­пирические\n";
echo "правила применимы не везде. Таблицу характеристик аппаратного обеспечения для\n";
echo "некоторых машин можно найти в #с.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>2.6.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Беззнаковые (unsigned) целые типы идеально подходят\n";
echo "для применений, в которых память рассматривается как массив би­тов.\n";
echo "Использование unsigned вместо int с тем, чтобы получить еще один бит для\n";
echo "представления положительных целых, почти ни­когда не оказывается хорошей идеей.\n";
echo "Попытки гарантировать то, что некоторые значения положительны, посредством\n";
echo "описания пе­ременных как unsigned, обычно срываются из-за правил неявного\n";
echo "преобразования. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>unsigned\n";
echo "surprise = -1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>допустимо (но компилятор\n";
echo "обязательно сделает предупреждение).</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967928\">2.3.2 Неявное Преобразование Типа</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Основные типы можно свободно сочетать в\n";
echo "присваиваниях и выражениях. Везде, где это возможно, значения преобразуются\n";
echo "так, чтобы информация не терялась. Точные правила можно найти в #с.6.6.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Существуют случаи, в которых информация может теряться или\n";
echo "искажаться. Присваивание значения одного типа переменной другого типа,\n";
echo "представление которого содержит меньшее число бит, неизбежно является\n";
echo "источником неприятностей. Допустим, например, что следующая часть программы\n";
echo "выполняется на машине с двоичным дополнительным представлением целых и\n";
echo "8-битовыми символами:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int i1 = 256+255;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char ch = i1 // ch == 255</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int i2 = ch; //\n";
echo "i2 == ?</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В присваивании ch=i1 теряется один бит (самый значи­мый!),\n";
echo "и ch будет содержать двоичный код &quot;все-единицы&quot; (т.е. 8 единиц); при\n";
echo "присваивании i2 это никак не может превратить­ся в 511! Но каким же может быть\n";
echo "значение i2? На DEC VAX, где char знаковое, ответ будет -1, на AT&amp;T 3B-20,\n";
echo "где char безз­наковые, ответ будет 255. В С++ нет динамического (т.е. дейс­твующего\n";
echo "во время исполнения) механизма для разрешения такого рода проблем, а выяснение\n";
echo "на стадии компиляции вообще очень сложно, поэтому программист должен быть\n";
echo "внимателен.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967929\">2.3.3 Производные Типы</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Другие типы можно выводить из основных типов (и\n";
echo "типов, определенных пользователем) посредством операций описания:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>* указатель</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>&amp; ссылка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>[] вектор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>() функция</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>и механизма определения структур.\n";
echo "Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int* a;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>float v[10];</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>char* p[20];\n";
echo "// вектор из 20 указателей на символ</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void f(int);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>struct str (*\n";
echo "short length; char* p; *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Правила построения типов с помощью этих операций\n";
echo "подроб­но объясняются в #с.8.3-4. Основная идея состоит в том, что описание\n";
echo "производного типа отражает его использование. Напри­мер:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int v[10]; //\n";
echo "описывает вектор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>i = v[3];  // использует элемент\n";
echo "вектора</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int* p;                 //\n";
echo "описывает указатель</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>i = *p;                //\n";
echo "использует указываемый объект</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Вся сложность понимания записи производных типов\n";
echo "проис­текает из того, что операции * и &amp; префиксные, а операции [] ()\n";
echo "постфиксные, поэтому для формулировки типов в тех случаях, когда приоритеты\n";
echo "операций создают затруднения, надо использо­вать скобки. Например, поскольку\n";
echo "приоритет у [] выше, чем у *, то</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int* v[10];\n";
echo "// вектор указателей</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int (*p)[10]; // указатель на\n";
echo "вектор</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Большинство людей просто помнят, как выглядят\n";
echo "наиболее обычные типы.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Описание каждого имени, вводимого в программе, может\n";
echo "оказаться утомительным, особенно если их типы одинаковы. Но можно описывать в\n";
echo "одном описании несколько имен. В этом слу­чае описание содержит вместо одного\n";
echo "имени список имен, разде­ленных запятыми. Например, два имени можно описать\n";
echo "так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int x, y;                              //\n";
echo "int x; int y;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>При описании производных типов можно указать, что\n";
echo "опера­ции применяются только к отдельным именам (а не ко всем остальным именам\n";
echo "в этом описании). Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int* p, y;                            // int* p; int y; </span>НЕ <span\n";
echo "lang=EN-US>int* y;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int x, *p;                            // int x; int* p;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int v[10],\n";
echo "*p;   // int v[10]; int* p;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Мнение автора таково, что подобные конструкции\n";
echo "делают программу менее удобочитаемой, и их следует избегать.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967930\">2.3.4 Тип void</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Тип void (пустой) синтаксически ведет себя как\n";
echo "основной тип. Однако использовать его можно только как часть производ­ного\n";
echo "типа, объектов типа void не существует. Он используется для того, чтобы\n";
echo "указать, что функция не возвращает значения, или как базовый тип для указателей\n";
echo "на объекты неизвестного типа.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>void f()   //\n";
echo "f не возвращает значение</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>void* pv;  // указатель на\n";
echo "объект неизвестного типа</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Переменной типа указатель на void (void *), можно\n";
echo "прис­ваивать указатель любого типа. На первый взгляд это может по­казаться не\n";
echo "особенно полезным, поскольку void* нельзя разыме­новать, но именно это\n";
echo "ограничение и делает тип void* полезным. Главным образом, он применяется для\n";
echo "передачи указа­телей функциям, которые не позволяют сделать предположение о\n";
echo "типе объекта, и для возврата из функций нетипизированных объ­ектов. Чтобы использовать\n";
echo "такой объект, необходимо применить явное преобразование типа. Подобные функции\n";
echo "обычно находятся на самом нижнем уровне системы, там, где осуществляется рабо­та\n";
echo "с основными аппаратными ресурсами. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void* allocate(int size);  // </span>выделить</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>void\n";
echo "deallocate(void*);                              // </span>освободить</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>f() (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int* pi = (int*)allocate(10*sizeof(int));</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* pc = (char*)allocate(10);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>//...</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>deallocate(pi);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>deallocate(pc);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967931\">2.3.5 Указатели</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Для большинства типов T T* является типом\n";
echo "арифметический указатель на T. То есть, в переменной типа T* может храниться\n";
echo "адрес объекта типа T. Для указателей на вектора и указателей на функции вам, к\n";
echo "сожалению, придется пользоваться более сложной записью:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int* pi;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>char** cpp;                                       //\n";
echo "указатель на указатель на char</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int\n";
echo "(*vp)[10];                                     // указатель на вектор из 10\n";
echo "int'ов</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int\n";
echo "(*fp)(char, char*); // указатель на функцию</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:171.6pt;margin-bottom:.0001pt;text-autospace:none'>//получающую\n";
echo "параметры(char, char*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:171.6pt;text-autospace:none'>// и возвращающую int</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Основная операция над указателем - разыменование,\n";
echo "то есть ссылка на объект, на который указывает указатель. Эта операция также называется\n";
echo "косвенным обращением. Операция ра­зыменования - это унарное * (префиксное).\n";
echo "Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>char c1 =\n";
echo "'a';</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>char* p =\n";
echo "&amp;c1; // в p хранится адрес c1</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>char c2 = *p;\n";
echo "// c2 = 'a'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Переменная, на которую указывает p,- это c1, а значение, которое хранится\n";
echo "в c1, это 'a', поэтому присваиваемое c2 зна­чение *p есть 'a'.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Над указателями можно осуществлять некоторые арифмети­ческие\n";
echo "действия. Вот, например, функция, подсчитывающая число символов в строке (не\n";
echo "считая завершающего 0):</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int strlen(char* p)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int i = 0;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (*p++) i++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>return i;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Другой способ найти длину состоит в том, чтобы\n";
echo "сначала найти конец строки, а затем вычесть адрес начала строки из адреса ее\n";
echo "конца:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int strlen(char* p)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* q = p;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (*q++) ;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return q-p-1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Очень полезными могут оказаться указатели на\n";
echo "функции. Они обсуждаются в #4.6.7.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967932\">2.3.6 Вектора</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Для типа T T[size] является типом &quot;вектор из\n";
echo "size эле­ментов типа T&quot;. Элементы индексируются (нумеруются) от 0 до\n";
echo "size-1. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>float v[3];\n";
echo "// вектор из трех float: v[0], v[1], v[2]</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int a[2][5];\n";
echo "// два вектора из пяти int</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>char* vpc; // вектор из 32\n";
echo "указателей на символ</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Цикл для печати целых значений букв нижнего\n";
echo "регистра можно было бы написать так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>extern int\n";
echo "strlen(char*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>char alpha[] =\n";
echo "&quot;abcdefghijklmnoprstuvwxyz&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>main()</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>int sz = strlen(alpha);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for (int i=0; i&lt;sz; i++) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char ch = alpha[i];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;'&quot; &lt;&lt; chr(ch) &lt;&lt; &quot;'&quot;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:99.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&lt;&lt; &quot; = &quot; &lt;&lt; ch</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:99.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&lt;&lt; &quot; = 0&quot; &lt;&lt; oct(ch)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>&lt;&lt; &quot; = 0x&quot; &lt;&lt;\n";
echo "hex(ch) &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Функция chr() возвращает представление небольшого\n";
echo "целого в виде строки; например, chr(80) это &quot;P&quot; на машине, на кото­рой\n";
echo "используется набор символов ASCII. Функция oct() строит восьмеричное\n";
echo "представление своего целого аргумента, а hex() строит шестнадцатиричное\n";
echo "представление своего целого аргумен­та; chr() oct() и hex() описаны в\n";
echo "&lt;stream.h&gt;. Функция strlen() использовалась для подсчета числа символов в\n";
echo "alpha; вместо этого можно было использовать значение размера alpha (#2.4.4).\n";
echo "Если применяется набор символов ASCII, то выдача выглядит так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>'a' = 97 = 0141 = 0x61</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>'b' = 98 = 0142 = 0x62</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>'c' = 99 = 0143\n";
echo "= 0x63</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>...</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Заметим, что задавать размер вектора alpha\n";
echo "необязатель­но. Компилятор считает число символов в символьной строке,\n";
echo "указанной в качестве инициализатора. Использование строки как инициализатора\n";
echo "для вектора символов - удобное, но к сожалению и единственное применение строк.\n";
echo "Аналогичное этому присваива­ние строки вектору отсутствует. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>char v[9];</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>v = &quot;строка&quot;; //\n";
echo "ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>ошибочно, поскольку присваивание не\n";
echo "определено для векторов.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Конечно, для инициализации символьных массивов\n";
echo "подходят не только строки. Для остальных типов нужно применять более сложную\n";
echo "запись. Эту запись можно использовать и для символь­ных векторов. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int v1[] = (*\n";
echo "1, 2, 3, 4 *);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int v2[] = (*\n";
echo "'a', 'b', 'c', 'd' *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char v3[] = (* 1, 2, 3, 4 *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>char v4[] = (*\n";
echo "'a', 'b', 'c', 'd' *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Заметьте, что v4 - вектор из четырех (а не пяти)\n";
echo "симво­лов; он не оканчивается нулем, как того требуют соглашение и библиотечные\n";
echo "подпрограммы. Обычно применение такой записи ог­раничивается статическими\n";
echo "объектами.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Многомерные массивы представляются как вектора векторов, и\n";
echo "применение записи через запятую, как это делается в некото­рых других языках,\n";
echo "дает ошибку при компиляции, так как запя­тая (,) является операцией следования\n";
echo "(см. #3.2.2). Попробуй­те, например, сделать так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int bad[5,2];                             //\n";
echo "ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>и так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int v[5][2];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int bad = v[4,1];   // </span>ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int good =\n";
echo "v[4][1]; // </span>ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Описание</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>char v[2][5];</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>описывает вектор из двух элементов, каждый из\n";
echo "которых является вектором типа char[5]. В следующем примере первый из этих\n";
echo "векторов инициализируется первыми пятью буквами, а вто­рой - первыми пятью\n";
echo "цифрами.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char v[2][5] = (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>'a', 'b', 'c', 'd', 'e',</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>'0', '1', '2', '3', '4'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>*)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>main() (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for (int i = 0; i&lt;2; i++) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for (int j = 0; j&lt;5; j++)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:92.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;v[&quot; &lt;&lt; i &lt;&lt; &quot;][&quot;\n";
echo "&lt;&lt; j</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:125.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&lt;&lt; &quot;]=&quot; &lt;&lt; chr(v[i][j]) &lt;&lt; &quot; &quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>cout &lt;&lt;\n";
echo "&quot;\n&quot;;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>это дает в результате</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>v[0][0]=a v[0][1]=b v[0][2]=c v[0][3]=d v[0][4]=e</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>v[1][0]=0\n";
echo "v[1][1]=1 v[1][2]=2 v[1][3]=3 v[1][4]=4</span></p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967933\">2.3.7 Указатели и Вектора</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Указатели и вектора в С++ связаны очень тесно. Имя\n";
echo "век­тора можно использовать как указатель на его первый элемент, поэтому пример\n";
echo "с алфавитом можно было написать так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>char alpha[]\n";
echo "= &quot;abcdefghijklmnopqrstuvwxyz&quot;;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* p = alpha;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>char ch;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>while (ch = *p++)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; chr(ch) &lt;&lt; &quot; = &quot; &lt;&lt; ch</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:72.6pt;text-autospace:none'><span lang=EN-US>&lt;&lt; &quot;\n";
echo "= 0&quot; &lt;&lt; oct(ch) &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Описание p можно было также\n";
echo "записать как</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>char* p =\n";
echo "&amp;alpha[0];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Эта эквивалентность широко используется в вызовах\n";
echo "функ­ций, в которых векторный параметр всегда передается как ука­затель на\n";
echo "первый элемент вектора. Так<span lang=EN-US>, </span>в примере</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>extern int strlen(char*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char v[] = &quot;Annemarie&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* p = v;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>strlen(p);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>strlen(v);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>функции strlen в обоих вызовах передается одно и то\n";
echo "же значение. Вся штука в том, что этого невозможно избежать; то есть не\n";
echo "существует способа описать функцию так, чтобы вектор v в вызове функции\n";
echo "копировался (#4.6.3). Результат применения к указателям арифметических операций\n";
echo "+, -, ++ или -- зависит от типа объекта, на который они указывают. Когда к\n";
echo "указателю p типа T* применяется арифметическая операция, предполагает­ся, что p\n";
echo "указывает на элемент вектора объектов типа T; p+1 означает следующий элемент\n";
echo "этого вектора, а p- 1 - предыдущий элемент. Отсюда следует, что значение p+1\n";
echo "будет на sizeof(T) больше значения p. Например, выполнение</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>main()</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char cv[10];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>int iv[10];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* pc = cv;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>int* pi = iv;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>cout &lt;&lt; &quot;char* &quot; &lt;&lt;\n";
echo "long(pc+1)-long(pc) &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; &quot;int* &quot; &lt;&lt; long(ic+1)-long(ic)\n";
echo "&lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>*)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>дает</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* 1</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int* 4</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>поскольку на моей машине каждый символ занимает\n";
echo "один байт, а каждое целое занимает четыре байта. Перед вычитанием значения\n";
echo "указателей преобразовывались к типу long с помощью явного преобразования типа\n";
echo "(#3.2.5). Они преобразовывались к long, а не к &quot;очевидному&quot; int,\n";
echo "поскольку есть машины, на ко­торых указатель не влезет в int (то есть,\n";
echo "sizeof(int)&lt;sizeof(long) ).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Вычитание указателей определено только тогда, когда оба\n";
echo "указателя указывают на элементы одного и того же вектора (хо­тя в языке нет\n";
echo "способа удостовериться, что это так). Когда из одного указателя вычитается\n";
echo "другой, результатом является чис­ло элементов вектора между этими указателями\n";
echo "(целое число). Можно добавлять целое к указателю или вычитать целое из ука­зателя;\n";
echo "в обоих случаях результатом будет значение типа ука­зателя. Если это значение\n";
echo "не указывает на элемент того же вектора, на который указывал исходный\n";
echo "указатель, то результат использования этого значения неопределен. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int v1[10];</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>int v2[10];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int i = &amp;v1[5]-&amp;v1[3]; // 2</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'>i = &amp;v1[5]-&amp;v2[3]; //\n";
echo "результат неопределен</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int* p = v2+2;                                 // p == &amp;v2[2]</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>p = v2-2;                             //\n";
echo "p неопределено</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967934\">2.3.8 Структуры</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Вектор есть совокупность элементов одного типа,\n";
echo "struct является совокупностью элементов (практически) произвольных типов.\n";
echo "Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>struct\n";
echo "address (* // почтовый адрес</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* name; // </span>имя<span lang=EN-US> &quot;Jim Dandy&quot;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>long number; // </span>номер дома<span lang=EN-US> 61</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* street; // </span>улица<span lang=EN-US> &quot;South\n";
echo "Street&quot;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* town; // </span>город<span lang=EN-US> &quot;New\n";
echo "Providence&quot;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* state[2]; // </span>штат<span lang=EN-US> 'N' 'J'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>int zip; //\n";
echo "индекс 7974</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>определяет новый тип, названный address (почтовый\n";
echo "ад­рес), состоящий из пунктов, требующихся для того, чтобы пос­лать кому-нибудь\n";
echo "корреспонденцию (вообще говоря, address не является достаточным для работы с полным\n";
echo "почтовым адресом, но в качестве примера достаточен). Обратите внимание на точку\n";
echo "с запятой в конце; это одно из очень немногих мест в С++, где необходимо\n";
echo "ставить точку с запятой после фигурной скобки, по­этому люди склонны забывать\n";
echo "об этом.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Переменные типа address могут описываться точно также, как\n";
echo "другие переменные, а доступ к отдельным членам получается с помощью операции .\n";
echo "(точка). Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>address jd;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>jd.name = &quot;Jim Dandy&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>jd.number = 61;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Запись, которая использовалась для инициализации\n";
echo "векто­ров, можно применять и к переменным структурных типов. Напри<span\n";
echo "lang=EN-US>­</span>мер<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>address jd = (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&quot;Jim Dandy&quot;,</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>61, &quot;South Street&quot;,</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&quot;New Providence&quot;, (*'N','J'*), 7974</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Однако обычно лучше использовать конструктор\n";
echo "(#5.2.4). Заметьте, что нельзя было бы инициализировать jd.state стро­кой\n";
echo "&quot;NJ&quot;. Строки оканчиваются символом '\0', поэтому в &quot;NJ&quot; три\n";
echo "символа, то есть на один больше, чем влезет в jd.state.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>К структурным объектам часто обращаются посредством ука­зателей используя\n";
echo "операцию -&gt;. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void print_addr(address* p)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; p-&gt;name &lt;&lt; &quot;\n&quot;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'><span lang=EN-US>&lt;&lt; p-&gt;number &lt;&lt; &quot;\n";
echo "&quot; &lt;&lt; p-&gt;street &lt;&lt; &quot;\n&quot;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&lt;&lt; p-&gt;town &lt;&lt; &quot;\n&quot;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&lt;&lt; chr(p-&gt;state[0]) &lt;&lt; chr(p-&gt;state[1])</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>&lt;&lt; &quot; &quot; &lt;&lt; p-&gt;zip &lt;&lt; &quot;\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Объекты типа структура можно присваивать,\n";
echo "передавать как параметры функции и возвращать из функции в качестве резуль­тата.\n";
echo "Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>address\n";
echo "current;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>address set_current(address next)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>address prev = current;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>current = next;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return prev;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Остальные осмысленные операции, такие как сравнение\n";
echo "(== и !=) не определены. Однако пользователь может определить эти операции, см.\n";
echo "Главу 6. Размер объекта структурного типа нель­зя вычислить просто как сумму\n";
echo "его членов. Причина этого сос­тоит в том, что многие машины требуют, чтобы\n";
echo "объекты опреде­ленных типов выравнивались в памяти только по некоторым\n";
echo "зависящим от архитектуры границам (типичный пример: целое должно быть выравнено\n";
echo "по границе слова), или просто гораздо более эффективно обрабатывают такие\n";
echo "объекты, если они вырав­нены в машине. Это приводит к &quot;дырам&quot; в\n";
echo "структуре. Например, (на моей машине) sizeof(address) равен 24, а не 22, как\n";
echo "можно было ожидать.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Заметьте, что имя типа становится доступным сразу после\n";
echo "того, как оно встретилось, а не только после того, как пол­ностью просмотрено\n";
echo "все описание. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct link(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>link* previous;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>link* successor;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Новые объекты структурного типа не могут быть описывать­ся, пока все\n";
echo "описание не просмотрено, поэтому</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct no_good (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>no_good member;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>является ошибочным (компилятор не может установить\n";
echo "раз­мер no_good). Чтобы дать возможность двум (или более) структурным типам\n";
echo "ссылаться друг на друга, можно просто опи­сать имя как имя структурного типа.\n";
echo "Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>struct list; // должна быть\n";
echo "определена позднее</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct link (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>link* pre;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>link* suc;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>link* member_of;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct list (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>link* head;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Без первого описания list описание link вызвало бы\n";
echo "к синтаксическую ошибку.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967935\">2.3.9 Эквивалентность типов</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Два структурных типа являются различными даже когда\n";
echo "они имеют одни и те же члены. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct s1 (* int a; *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>struct s2 (*\n";
echo "int a; *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>есть два разных типа, поэтому</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>s1 x;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>s2 y = x; // ошибка:\n";
echo "несоответствие типов</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Структурные типы отличны также от основных типов, поэто­му</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>s1 x;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int i = x; // ошибка:\n";
echo "несоответствие типов</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Однако, существует механизм для описания нового\n";
echo "имени для типа без введения нового типа. Описание с префиксом typedef описывает\n";
echo "не новую переменную данного типа, а новое имя этого типа. Например<span\n";
echo "lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>typedef char* Pchar;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:248.15pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>Pchar p1, p2; char* p3 = p1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:0cm;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>Это может служить удобной\n";
echo "сокращенной записью.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967936\">2.3.10 Ссылки</a> </h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Ссылка является другим именем объекта. Главное\n";
echo "примене­ние ссылок состоит в спецификации операций для типов, опреде­ляемых\n";
echo "пользователем; они обсуждаются в Главе 6. Они могут также быть полезны в\n";
echo "качестве параметров функции. Запись x&amp; означает ссылка на x. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int i = 1;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int&amp; r =\n";
echo "i; // r и i теперь ссылаются на один int</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int x = r // x = 1</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>r = 2; // i = 2;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Ссылка должна быть инициализирована (должно быть\n";
echo "что-то, для чего она является именем). Заметьте, что инициализация ссылки есть\n";
echo "нечто совершенно отличное от присваивания ей.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Вопреки ожиданиям, ни одна операция на ссылку не дейс­твует.\n";
echo "Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int ii = 0;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int&amp; rr = ii;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>rr++; // ii увеличивается на 1</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>допустимо, но rr++ не увеличивает ссылку; вместо\n";
echo "этого + + применяется к int, которым оказывается ii. Следовательно, после\n";
echo "инициализации значение ссылки не может быть изменено; она всегда ссылается на\n";
echo "объект, который ей было дано обозна­чать (денотировать) при инициализации.\n";
echo "Чтобы получить указа­тель на объект, денотируемый ссылкой rr, можно написать\n";
echo "&amp;rr.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Очевидным способом реализации ссылки является\n";
echo "констант­ный указатель, который разыменовывается при каждом использо­вании. Это\n";
echo "делает инициализацию ссылки тривиальной, когда инициализатор является lvalue\n";
echo "(объектом, адрес которого вы можете взять, см. #с.5). Однако инициализатор для\n";
echo "&amp;T не обя­зательно должен быть lvalue, и даже не должен быть типа T. В\n";
echo "таких случаях:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>[1] Во-первых, если необходимо, применяется преобразова­ние типа\n";
echo "(#с.6.6-8, #с.8.5.6),</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>[2] Затем полученное значение помещается во временную\n";
echo "переменную и</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>[3] Наконец, ее адрес используется в качестве значения\n";
echo "инициализатора.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>Рассмотрим описание</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>double&amp; dr = 1;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>Это интерпретируется так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>double* drp;\n";
echo "// ссылка, представленная как указатель</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>double temp;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>temp = double(1);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>drp =\n";
echo "&amp;temp;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int x = 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void incr(int&amp; aa) (* aa++; *)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>incr(x) // x =\n";
echo "2</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>По определению семантика передачи параметра та же,\n";
echo "что семантика инициализации, поэтому параметр aa функции incr становится другим\n";
echo "именем для x. Однако, чтобы сделать прог­рамму читаемой, в большинстве случаев\n";
echo "лучше всего избегать функций, которые изменяют значение своих параметров. Часто\n";
echo "предпочтительно явно возвращать значение из функции или тре­бовать в качестве\n";
echo "параметра указатель:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int x = 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int next(int p) (* return p+1; *)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>x = next(x); //\n";
echo "x = 2</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void inc(int* p) (* (*p)++; *)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>inc(&amp;x); //\n";
echo "x = 3</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Ссылки также можно применять для определения\n";
echo "функций, которые могут использоваться и в левой, и в правой части присваивания.\n";
echo "Опять, большая часть наиболее интересных случа­ев этого встречается при\n";
echo "разработке нетривиальных типов, оп­ределяемых пользователем. Для примера давайте\n";
echo "определим прос­той ассоциативный массив. Вначале мы определим структуру пары\n";
echo "следующим образом:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct pair (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* name;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>int val;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Основная идея состоит в том, что строка имеет\n";
echo "ассоцииро­ванное с ней целое значение. Легко определить функцию поиска find(),\n";
echo "которая поддерживает структуру данных, состоящую из одного pair для каждой\n";
echo "отличной отличной от других строки, которая была ей представлена. Для краткости\n";
echo "представления ис­пользуется очень простая (и неэффективная) реализация:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const large = 1024;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>static pair\n";
echo "vec[large+1*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>pair* find(char* p)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>/*</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>поддерживает\n";
echo "множество пар &quot;pair&quot;:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>ищет p, если\n";
echo "находит, возвращает его &quot;pair&quot;,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>иначе\n";
echo "возвращает неиспользованную &quot;pair&quot;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*/</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for (int i=0; vec[i].name; i++)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:66.0pt;text-autospace:none'><span lang=EN-US>if\n";
echo "(strcmp(p,vec[i].name)==0) return &amp;vec[i];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>if (i == large)\n";
echo "return &amp;vec[large-1];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return &amp;vec[i];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Эту функцию может использовать функция value(),\n";
echo "реализу­ющая массив целых, индексированный символьными строками (вместо\n";
echo "обычного способа):</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int&amp; value(char* p)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>pair* res = find(p);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>if\n";
echo "(res-&gt;name == 0) (* // до сих пор не встречалось:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:52.8pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>res-&gt;name = new char[strlen(p)+1]; // </span>инициализи<span\n";
echo "lang=EN-US>-</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:52.8pt;margin-bottom:.0001pt;text-indent:231.0pt;text-autospace:\n";
echo "none'><span lang=EN-US>// </span>ровать<span lang=EN-US>\n";
echo "strcpy(res-&gt;name,p);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:52.8pt;margin-bottom:.0001pt;text-autospace:none'>res-&gt;val =\n";
echo "0; // начальное значение 0</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return res-&gt;val;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Для данной в качестве параметра строки value()\n";
echo "находит целый объект (а не значение соответствующего целого); после чего она\n";
echo "возвращает ссылку на него. Ее можно использовать, например, так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>const MAX = 256; // больше\n";
echo "самого большого слова</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>main()</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>//\n";
echo "подсчитывает число вхождений каждого слова во вводе</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>char buf[MAX];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'><span lang=EN-US>while\n";
echo "(cin&gt;&gt;buf) value(buf)++;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>for (int i=0; vec[i].name; i++)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-indent:52.8pt;text-autospace:\n";
echo "none'><span lang=EN-US>cout &lt;&lt; vec[i].name &lt;&lt; &quot;: &quot;\n";
echo "&lt;&lt; vec [i].val &lt;&lt; &quot;\n&quot;; *)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>На каждом проходе цикл считывает одно слово из стандарт­ной\n";
echo "строки ввода cin в buf (см. Главу 8), а затем обновляет связанный с ней счетчик\n";
echo "с помощью find(). И, наконец, печата­ется полученная таблица различных слов во\n";
echo "введенном тексте, каждое с числом его встречаемости. Например, если вводится</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>aa bb bb aa aa bb aa aa</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>то программа выдаст:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>aa: 5</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>bb: 3</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Легко усовершенствовать это в плане собственного\n";
echo "типа ассоциированного массива с помощью класса с перегруженной операцией (#6.7)\n";
echo "выбора [].</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967937\">2.3.11 Регистры</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Во многих машинных архитектурах можно обращаться к\n";
echo "(не­большим) объектам заметно быстрее, когда они помещены в ре­гистр. В\n";
echo "идеальном случае компилятор будет сам определять оп­тимальную стратегию\n";
echo "использования всех регистров, доступных на машине, для которой компилируется\n";
echo "программа. Однако это нетривиальная задача, поэтому иногда программисту стоит\n";
echo "дать подсказку компилятору. Это делается с помощью описания объек­та как\n";
echo "register. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>register int i;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>register point cursor;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>register char*\n";
echo "p;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Описание register следует использовать только в тех\n";
echo "слу­чаях, когда эффективность действительно важна. Описание каж­дой переменной\n";
echo "как register засорит текст программы и может даже увеличить время выполнения\n";
echo "(обычно воспринимаются все инструкции по помещению объекта в регистр или\n";
echo "удалению его оттуда).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:33.0pt;margin-bottom:.0001pt;text-autospace:none'>Невозможно\n";
echo "получить   адрес   имени,                               описанного   как</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>register, регистр не может также\n";
echo "быть глобальным.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967938\">2.4 Константы</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>С++ дает возможность записи значений основных\n";
echo "типов: символьных констант, целых констант и констант с плавающей точкой. Кроме\n";
echo "того, ноль (0) может использоваться как конс­танта любого указательного типа, и\n";
echo "символьные строки являются константами типа char[]. Можно также задавать\n";
echo "символические константы. Символическая константа - это имя, значение кото­рого\n";
echo "не может быть изменено в его области видимости. В С++ имеется три вида\n";
echo "символических констант: (1) любому значению любого типа можно дать имя и\n";
echo "использовать его как константу, добавив к его описанию ключевое слово const;\n";
echo "(2) множество целых констант может быть определено как перечисление; и (3)\n";
echo "любое имя вектора или функции является константой.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967939\">2.4.1 Целые Константы</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Целые константы предстают в четырех обличьях: десятич­ные,\n";
echo "восьмеричные, шестнадцатиричные константа и символьные константы. Десятичные\n";
echo "используются чаще всего и выглядят так, как можно было бы ожидать:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>0 1234 976 12345678901234567890</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Десятичная константа имеет тип int, при условии,\n";
echo "что она влезает в int, в противном случае ее тип long. Компилятор должен\n";
echo "предупреждать о константах, которые слишком длинны для представления в машине.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:33.0pt;margin-bottom:.0001pt;text-autospace:none'>Константа,\n";
echo "которая начинается нулем за которым идет x (0</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-autospace:\n";
echo "none'>x), является шестнадцатиричным числом (с основанием 16), а константа,\n";
echo "которая начинается нулем за которым идет цифра, является восьмеричным числом (с\n";
echo "основанием 8). Вот примеры восьмеричных констант:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>0 02 077 0123</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>их десятичные эквиваленты - это 0, 2, 63, 83. В шестнад­цатиричной записи\n";
echo "эти константы выглядят так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>0x0 0x2 0x3f\n";
echo "0x53</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Буквы a, b, c, d, e и f, или их эквиваленты в\n";
echo "верхнем регистре, используются для представления чисел 10, 11, 12, 13, 14 и 15,\n";
echo "соответственно. Восьмеричная и шестнадцатиричная записи наиболее полезны для\n";
echo "записи набора битов применение этих записей для выражения обычных чисел может\n";
echo "привести к не­ожиданностям. Например, на машине, где int представляется как\n";
echo "двоичное дополнительное шестнадцатиричное целое, 0xffff явля­ется отрицательным\n";
echo "десятичным числом -1; если бы для предс­тавления целого использовалось большее\n";
echo "число битов, то оно было бы числом 65535.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967940\">2.4.2 Константы с Плавающей Точкой</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Константы с плавающей точкой имеют тип double. Как\n";
echo "и в предыдущем случае, компилятор должен предупреждать о констан­тах с\n";
echo "плавающей точкой, которые слишком велики, чтобы их мож­но было представить. Вот\n";
echo "некоторые константы с плавающей точ­кой:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>1.23 .23 0.23 1. 1.0 1.2e10\n";
echo "1.23e-15</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Заметьте, что в середине константы с плавающей\n";
echo "точкой не может встречаться пробел. Например, 65.43 e-21 является не константой\n";
echo "с плавающей точкой, а четырьмя отдельными лекси­ческими символами (лексемами):</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>65.43 e - 21</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>и вызовет синтаксическую ошибку.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Если вы хотите иметь константу константа с\n";
echo "плавающей точкой; типа float, вы можете определить ее так (#2.4.6):</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>const float pi\n";
echo "= 3.14159265;</span></p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967941\">2.4.3 Символьные Константы</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Хотя в С++ и нет отдельного символьного типа\n";
echo "данных, точнее, символ может храниться в целом типе, в нем для симво­лов\n";
echo "имеется специальная и удобная запись. Символьная констан­та - это символ,\n";
echo "заключенный в одинарные кавычки; например, 'a' или '0'. Такие символьные\n";
echo "константы в действительности являются символическими константами для целого\n";
echo "значения сим­волов в наборе символов той машины, на которой будет выпол­няться\n";
echo "программа (который не обязательно совпадает с набором символов, применяемом на\n";
echo "том компьютере, где программа компи­лируется). Поэтому, если вы выполняетесь на\n";
echo "машине, использу­ющей набор символов ASCII, то значением '0' будет 48, но если\n";
echo "ваша машина использует EBCDIC набор символов, то оно будет</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-autospace:\n";
echo "none'>240. Употребление символьных констант вместо десятичной запи­си делает\n";
echo "программу более переносимой. Несколько символов также имеют стандартные имена,\n";
echo "в которых обратная косая \ ис­пользуется как escape-символ:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>'\b',         возврат\n";
echo "назад</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>'\f',          перевод\n";
echo "формата</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>'\n',         новая\n";
echo "строка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>'\r',          возврат\n";
echo "каретки</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>'\t',          горизонтальная\n";
echo "табуляция</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>'\v',         вертикальная\n";
echo "табуляция</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>'\\',          \\n";
echo "обратная косая (обратный слэш)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>'\'',          одинарная\n";
echo "кавычка '</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>'\&quot;',          двойная\n";
echo "кавычка &quot;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'>'\0',         null, пустой\n";
echo "символ, целое значение 0</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Вопреки их внешнему виду каждое является одним\n";
echo "символом. Можно также представлять символ одно-, дву- или трехзначным\n";
echo "восьмеричным числом (символ \, за которым идут восьмеричные цифры), или одно-,\n";
echo "дву- или трехзначным шестнадцатиричным числом (\x, за которым идут\n";
echo "шестнадцатиричные цифры). Напри­мер:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>'\6' '\x6' 6\n";
echo "ASCII ack</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>'\60' '\x30' 48 ASCII '0'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>'\137' '\x05f'\n";
echo "95 ASCII '_'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Это позволяет представлять каждый символ из\n";
echo "машинного набора символов, и в частности вставлять такие символы в сим­вольные\n";
echo "строки (см. следующий раздел). Применение числовой записи для символов делает\n";
echo "программу непереносимой между ма­шинами с различными наборами символов.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967942\">2.4.4 Строки</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Строковая константа - это последовательность\n";
echo "символов, заключенная в двойные кавычки &quot;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>&quot;это строка&quot;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Каждая строковая константа содержит на один символ\n";
echo "боль­ше, чем кажется; все они заканчиваются пустым символом '\0' со значением\n";
echo "0. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>sizeof(&quot;asdf&quot;)==5;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Строка имеет тип &quot;вектор из соответствующего\n";
echo "числа сим­волов&quot;, поэтому &quot;asdf&quot; имеет тип char[5]. Пустая\n";
echo "строка запи­сывается &quot;&quot; (и имеет тип char[1]). Заметьте, что для\n";
echo "каждой строки s strlen(s)==sizeof(s)-1, поскольку strlen() не учиты­вает\n";
echo "завершающий 0.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Соглашение о представлении неграфических символов с об­ратной\n";
echo "косой можно использовать также и внутри строки. Это дает возможность\n";
echo "представлять двойные кавычки и escape-сим­вол. Самым обычным символом этого\n";
echo "рода является, безусловно, символ новой строки '\n'. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>cout &lt;&lt; &quot;гудок в\n";
echo "конце сообщения\007\n&quot;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>где 7 - значение ASKII символа bel\n";
echo "(звонок).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>В строке невозможно иметь\n";
echo "&quot;настоящую&quot; новую строку:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:26.4pt;margin-bottom:.0001pt;text-autospace:none'>&quot;это не\n";
echo "строка,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:26.4pt;text-autospace:none'>а синтаксическая ошибка&quot;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Однако в строке может стоять обратная косая, сразу\n";
echo "после которой идет новая строка; и то, и другое будет проигнориро­вано.\n";
echo "Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:26.4pt;margin-bottom:.0001pt;text-autospace:none'>cout &lt;&lt;\n";
echo "&quot;здесь все \</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:26.4pt;text-autospace:none'>ok&quot;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>напечатает</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:26.4pt;text-autospace:none'>здесь все ok</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Новая строка, перед которой идет escape (обратная\n";
echo "ко­сая), не приводит к появлению в строке новой строки, это просто\n";
echo "договоренность о записи.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В строке можно иметь пустой символ, но большинство прог­рамм\n";
echo "не будет предполагать, что есть символы после него. Нап­ример, строка\n";
echo "&quot;asdf\000hjkl&quot; будет рассматриваться стандарт­ными функциями, вроде\n";
echo "strcpy() и strlen(), как &quot;asdf&quot;.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Вставляя численную константу в строку с помощью\n";
echo "восьмеричной или шестнадцатиричной записи благоразумно всегда использовать\n";
echo "число из трех цифр. Читать запись достаточно трудно и без необходимости\n";
echo "беспокоиться о том, является ли символ после константы цифрой или нет.\n";
echo "Разберите эти примеры:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:26.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char v1[] = &quot;a\x0fah\0129&quot;;  // 'a' '\xfa' 'h' '\12' '9'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:26.4pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char v2[] = &quot;a\xfah\129&quot;;                                //\n";
echo "'a' '\xfa' 'h' '\12' '9'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:26.4pt;text-autospace:none'><span lang=EN-US>char v3[] =\n";
echo "&quot;a\xfad\127&quot;;                                // 'a' '\xfad' '\127'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Имейте в виду, что двухзначной шестнадцатиричной\n";
echo "записи на машинах с 9-битовым байтом будет недостаточно.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967943\">2.4.5 Ноль</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Ноль можно употреблять как константу любого целого,\n";
echo "пла­вающего или указательного типа. Никакой объект не размещается по адресу 0.\n";
echo "Тип нуля определяется контекстом. Обычно (но не обязательно) он представляется\n";
echo "набором битов все-нули соот­ветствующей длины.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967944\">2.4.6 Const</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Ключевое слово const может добавляться к описанию\n";
echo "объек­та, чтобы сделать этот объект константой, а не переменной. Например<span\n";
echo "lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const int model = 145;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>const int v[] =\n";
echo "(* 1, 2, 3, 4 *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Поскольку константе ничего нельзя присвоить, она\n";
echo "должна быть инициализирована. Описание чего-нибудь как const гаран­тирует, что\n";
echo "его значение не изменится в области видимости:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>model = 145;  // </span>ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>model++;                   //\n";
echo "</span>ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Заметьте, что const изменяет тип, то есть\n";
echo "ограничивает способ использования объекта, вместо того, чтобы задавать способ\n";
echo "размещения константы. Поэтому например вполне разумно, а иногда и полезно,\n";
echo "описывать функцию как возвращающую const:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const char* peek(int i)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>return private[i];</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Функцию вроде этой можно было бы использовать для\n";
echo "того, чтобы давать кому-нибудь читать строку, которая не может быть затерта или\n";
echo "переписана (этим кем-то).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>С другой стороны, компилятор может несколькими путями\n";
echo "воспользоваться тем, что объект является константой (конечно, в зависимости от\n";
echo "того, насколько он сообразителен). Самое очевидное - это то, что для константы\n";
echo "не требуется выделять память, поскольку компилятор знает ее значение. Кроме того,\n";
echo "инициализатор константы часто (но не всегда) является конс­тантным выражением,\n";
echo "то есть он может быть вычислен на стадии компиляции. Однако для вектора\n";
echo "констант обычно приходится вы­делять память, поскольку компилятор в общем\n";
echo "случае не может вычислить, на какие элементы вектора сделаны ссылки в выраже­ниях.\n";
echo "Однако на многих машинах даже в этом случае может дос­тигаться повышение\n";
echo "эффективности путем размещения векторов констант в память, доступную только для\n";
echo "чтения.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Использование указателя вовлекает два объекта: сам ука­затель\n";
echo "и указываемый объект. Снабжение описания указателя &quot;префиксом&quot; const\n";
echo "делает объект, но не сам указатель, конс­тантой. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>const char*\n";
echo "pc = &quot;asdf&quot;; // указатель на константу</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>pc[3] = 'a';\n";
echo "// ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>pc = &quot;ghjk&quot;; // ok</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Чтобы описать сам const указатель, а не указываемый объ­ект, как\n";
echo "константный, используется операция const*. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>char *const\n";
echo "cp = &quot;asdf&quot;; // константный указатель</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>cp[3] = 'a';\n";
echo "// ok</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>cp = &quot;ghjk&quot;; // ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Чтобы сделать константами оба объекта, их оба нужно опи­сать const.\n";
echo "Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const char *const cpc = &quot;asdf&quot;; // const </span>указатель на<span\n";
echo "lang=EN-US> const</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cpc[3] = 'a'; // </span>ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>cpc =\n";
echo "&quot;ghjk&quot;; // </span>ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Объект, являющийся константой при доступе к нему\n";
echo "через один указатель, может быть переменной, когда доступ осущест­вляется другими\n";
echo "путями. Это в частности полезно для парамет­ров функции. Посредством описания\n";
echo "параметра указателя как const функции запрещается изменять объект, на который\n";
echo "он ука­зывает. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-top:13.3pt;margin-right:10.55pt;\n";
echo "margin-bottom:13.3pt;margin-left:0cm;text-align:center;text-autospace:none'>char*\n";
echo "strcpy(char* p, const char* q); // не может изменить q</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Указателю на константу можно присваивать адрес\n";
echo "перемен­ной, поскольку никакого вреда от этого быть не может. Однако нельзя\n";
echo "присвоить адрес константы указателю, на который не бы­ло наложено ограничение,\n";
echo "поскольку это позволило бы изменить значение объекта. Например:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>int a = 1;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const c = 2;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const* p1 = &amp;c; // ok</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const* p2 = &amp;a; // ok</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int* p3 = &amp;c; // </span>ошибка</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*p3 = 7; // меняет значение c</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Как обычно, если тип в описании опущен, то он\n";
echo "предпола­гается int.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967945\">2.4.7 Перечисления</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Есть другой метод определения целых констант, который\n";
echo "иногда более удобен, чем применение const. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>enum (* ASM,\n";
echo "AUTO, BREAK *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>перечисление определяет три целых константы,\n";
echo "называемых перечислителями, и присваивает им значения. Поскольку значе­ния\n";
echo "перечислителей по умолчанию присваиваются начиная с 0 в порядке возрастания,\n";
echo "это эквивалентно записи:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const ASM = 0;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>const AUTO = 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>const BREAK = 2;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>Перечисление может быть\n";
echo "именованным. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>enum keyword (*\n";
echo "ASM, AUTO, BREAK *);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Имя перечисления становится синонимом int, а не\n";
echo "новым типом. Описание переменной keyword, а не просто int, может дать как\n";
echo "программисту, так и компилятору подсказку о том, что использование\n";
echo "преднамеренное. Например<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>keyword key;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch (key) (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>case ASM:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>// что-то\n";
echo "делает</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case BREAK:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>// что-то\n";
echo "делает</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>break;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>побуждает компилятор выдать предупреждение,\n";
echo "поскольку только два значения keyword из трех используются.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Можно также задавать значения перечислителей явно.  Нап<span lang=EN-US>­</span>ример<span\n";
echo "lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>enum int16 (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>sign=0100000, // </span>знак</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>most_significant=040000, // </span>самый значимый</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>least_significant=1 // </span>наименее значимый</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Такие значения не обязательно должны быть\n";
echo "различными, возрастающими или положительными.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967946\">2.5 Экономия Пространства</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В ходе программирования нетривиальных разработок\n";
echo "неиз­бежно наступает время, когда хочется иметь больше пространс­тва памяти,\n";
echo "чем имеется или отпущено. Есть два способа выжать побольше пространства из\n";
echo "того, что доступно:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>[1] Помещение в байт более\n";
echo "одного небольшого объекта и</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>[2] Использование одного и того же пространства для хра­нения разных\n";
echo "объектов в разное время.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Первого можно достичь с помощью использования полей,\n";
echo "второго - через использование объединений. Эти конструкции описываются в\n";
echo "следующих разделах. Поскольку обычное их приме­нение состоит чисто в\n";
echo "оптимизации программы, и они в боль­шинстве случаев непереносимы, программисту\n";
echo "следует дважды по­думать, прежде чем использовать их. Часто лучше изменить\n";
echo "способ управления данными; например, больше полагаться на ди­намически\n";
echo "выделяемую память (#3.2.6) и меньше на заранее вы­деленную статическую память.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967947\">2.5.1 Поля</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Использование char для представления двоичной\n";
echo "перемен­ной, например, переключателя включено/выключено, может показаться\n";
echo "экстравагантным, но char является наименьшим объ­ектом, который в С++ может\n";
echo "выделяться независимо. Можно, од­нако, сгруппировать несколько таких крошечных\n";
echo "переменных вместе в виде полей struct. Член определяется как поле путем\n";
echo "указания после его имени числа битов, которые он занимает. Допустимы\n";
echo "неименованные поля; они не влияют на смысл имено­ванных полей, но неким\n";
echo "машинно-зависимым образом могут улуч­шить размещение:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct sreg (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned enable : 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned page : 3;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned : 1; // </span>неиспользуемое</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned mode : 2;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned : 4: // </span>неиспользуемое</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned access : 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned length : 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>unsigned non_resident : 1;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Получилось размещение регистра 0 состояния DEC\n";
echo "PDP11/45 (в предположении, что поля в слове размещаются слева напра­во). Этот\n";
echo "пример также иллюстрирует другое основное примене­ние полей: именовать части\n";
echo "внешне предписанного размещения. Поле должно быть целого типа и используется\n";
echo "как другие целые, за исключением того, что невозможно взять адрес поля. В ядре\n";
echo "операционной системы или в отладчике тип sreg можно было бы использовать так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>sreg* sr0 = (sreg*)0777572;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>//...</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>if\n";
echo "(sr-&gt;access) (* // нарушение доступа</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>// чистит\n";
echo "массив</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>sr-&gt;access\n";
echo "= 0;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Однако применение полей для упаковки нескольких\n";
echo "перемен­ных в один байт не обязательно экономит пространство. Оно экономит\n";
echo "пространство, занимаемое данными, но объем кода, не­обходимого для манипуляции\n";
echo "этими переменными, на большинстве машин возрастает. Известны программы, которые\n";
echo "значительно сжимались, когда двоичные переменные преобразовывались из по­лей\n";
echo "бит в символы! Кроме того, доступ к char или int обычно намного быстрее, чем\n";
echo "доступ к полю. Поля - это просто удобная и краткая запись для применения\n";
echo "логических операций с целью извлечения информации из части слова или введения\n";
echo "информации в нее.</p>\n";
echo "\n";
echo "<h3><a name=\"_Toc219967948\">2.5.2 Объединения</a></h3>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Рассмотрим проектирование символьной таблицы, в\n";
echo "которой каждый элемент содержит имя и значение, и значение может быть либо\n";
echo "строкой, либо целым:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct entry (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* name;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char type;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* string_value;   // </span>используется если<span lang=EN-US>\n";
echo "type == 's'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int int_value;                                  // </span>используется\n";
echo "если<span lang=EN-US> type == 'i'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>void print_entry(entry* p)</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>(*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>switch p-&gt;type (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 's':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; p-&gt;string_value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>case 'i':</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cout &lt;&lt; p-&gt;int_value;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>break;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>default:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>cerr &lt;&lt; &quot;</span>испорчен<span lang=EN-US> type\n&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>break;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Поскольку string_value и int_value никогда не могут\n";
echo "ис­пользоваться одновременно, ясно, что пространство пропадает впустую. Это\n";
echo "можно легко исправить, указав, что оба они долж­ны быть членами union. Например<span\n";
echo "lang=EN-US>, </span>так<span lang=EN-US>:</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct entry (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* name;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char type;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>union (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>char* string_value; //</span>используется если<span lang=EN-US> type\n";
echo "== 's'</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>int\n";
echo "int_value;                             //используется если type == 'i'</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>*);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Это оставляет всю часть программы, использующую\n";
echo "entry, без изменений, но обеспечивает, что при размещении entry string_value и\n";
echo "int_value имеют один и тот же адрес. Отсюда следует, что все члены объединения\n";
echo "вместе занимают лишь столько памяти, сколько занимает наибольший член.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Использование объединений таким образом, чтобы при чте­нии\n";
echo "значения всегда применялся тот член, с применением кото­рого оно записывалось,\n";
echo "совершенно оптимально. Но в больших программах непросто гарантировать, что\n";
echo "объединения использу­ются только таким образом, и из-за неправильного\n";
echo "использова­ния могут появляться трудно уловимые ошибки. Можно @капсули­зировать\n";
echo "объединение таким образом, чтобы соответствие между полем типа и типами членов\n";
echo "было гарантированно правильным (#5.4.6).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Объединения иногда используют для &quot;объединения и\n";
echo "преоб­разование типа&quot; (это делают главным образом программисты,\n";
echo "воспитанные на языках, не обладающих средствами преобразова­ния типов, где\n";
echo "жульничество является необходимым). Например, это &quot;преобразует&quot; на\n";
echo "VAX'е int в int*, просто предполагая по­битовую эквивалентность:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>struct fudge (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>union (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int i;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int* p;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'><span lang=EN-US>*);</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>fudge a;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>a.i = 4096;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int* p = a.p; // плохое\n";
echo "использование</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Но на самом деле это совсем не преобразование: на\n";
echo "неко­торых машинах int и int* занимают неодинаковое количество па­мяти, а на\n";
echo "других никакое целое не может иметь нечетный адрес. Такое применение\n";
echo "объединений непереносимо, а есть яв­ный способ указать преобразование типа\n";
echo "(#3.2.5).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Изредка объединения умышленно применяют, чтобы избежать\n";
echo "преобразования типов. Можно, например, использовать fudge, чтобы узнать представление\n";
echo "указателя 0:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>fudge.p = 0;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>int i = fudge.i; // i не\n";
echo "обязательно должно быть 0</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Можно также дать объединению имя, то есть сделать\n";
echo "его полноправным типом. Например, fudge можно было бы описать так:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>union fudge (*</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'><span\n";
echo "lang=EN-US>int i;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:66.0pt;margin-bottom:.0001pt;text-autospace:none'>int* p;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:13.2pt;text-autospace:none'>*);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>и использовать (неправильно) в точности как раньше.\n";
echo "Име­ются также и оправданные применения именованных объединений, см. #5.4.6.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967949\">2.6 Упражнения</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>1. (*1) Заставьте работать программу с &quot;Hello,\n";
echo "world&quot; (1.1.1).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>2. (*1) Для каждого описания в #2.1 сделайте следующее:\n";
echo "Если описание не является определением, напишите для него оп­ределение. Если\n";
echo "описание является определением, напишите для него описание, которое при этом не\n";
echo "является определением.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>3. (*1) Напишите описания для: указателя на символ; век­тора\n";
echo "из 10 целых; ссылки на вектор из 10 целых; указателя на вектор из символьных\n";
echo "строк; указателя на указатель на символ; константного целого; указателя на\n";
echo "константное целое; и конс­тантного указателя на целое. Каждый из них\n";
echo "инициализируйте.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>4. (*1.5) Напишите программу, которая печатает размеры\n";
echo "основных и указательных типов. Используйте операцию sizeof.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>5. (*1.5) Напишите программу, которая печатает буквы\n";
echo "'a'...'z' и цифры '0'...'9' и их числовые значения. Сделайте то же для\n";
echo "остальных печатаемых символов. Сделайте то же, но используя шестнадцатиричную\n";
echo "запись.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>6. (*1) Напечатайте набор битов, которым представляется\n";
echo "указатель 0 на вашей системе. Подсказка: #2.5.2.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>7. (*1.5) Напишите функцию, печатающую порядок и мантис­су параметра типа\n";
echo "double.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>8. (*2) Каковы наибольшие и наименьшие значения, на ва­шей\n";
echo "системе, следующих типов: char, short, int, long, float, double, unsigned,\n";
echo "char*, int* и void*? Имеются ли дополни­тельные ограничения на принимаемые ими\n";
echo "значения? Может ли, например, int* принимать нечетное значение? Как\n";
echo "выравниваются в памяти объекты этих типов? Может ли, например, int иметь\n";
echo "нечетный адрес?</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>9. (*1) Какое самое длинное локальное имя можно исполь­зовать\n";
echo "в С++ программе в вашей системе? Какое самое длинное внешнее имя можно\n";
echo "использовать в С++ программе в вашей систе­ме? Есть ли какие-нибудь ограничения\n";
echo "на символы, которые мож­но употреблять в имени?</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>10. (*2) Определите one\n";
echo "следующим образом:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>const one = 1;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Попытайтесь поменять значение one на 2. Определите\n";
echo "num следующим образом:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>const num[] = (* 1, 2 *);</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>Попытайтесь поменять значение\n";
echo "num[1] на 2.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>11. (*1) Напишите функцию, переставляющую два целых\n";
echo "(ме­няющую значения). Используйте в качестве типа параметра int*. Напишите\n";
echo "другую переставляющую функцию, использующую в ка­честве типа параметра\n";
echo "int&amp;.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>12. (*1) Каков размер вектора\n";
echo "str в следующем примере:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'><span lang=EN-US>char str[] =\n";
echo "&quot;a short string&quot;;</span></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:33.0pt;text-autospace:none'>Какова длина строки &quot;a\n";
echo "short string&quot;?</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>13. (*1.5) Определите таблицу названий месяцев года\n";
echo "и числа дней в них. Выведите ее. Сделайте это два раза: один раз используя\n";
echo "вектор для названий и вектор для числа дней, и один раз используя вектор\n";
echo "структур, в каждой из которых хра­нится название месяца и число дней в нем.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-align:justify;text-indent:33.0pt;text-autospace:\n";
echo "none'>14. (*1) С помощью typedef определите типы: беззнаковый char, константный\n";
echo "беззнаковый char, указатель на целое, ука­затель на указатель на char,\n";
echo "указатель на вектора символов, вектор из 7 целых указателей, указатель на\n";
echo "вектор из 7 целых указателей, и вектор из 8 векторов из 7 целых указателей. </p>\n";
echo "\n";
?>
