Язык программирования Си для персонального компьютера - [30]
Пример 3.
union {
char m[2][3];
int i, j, k;
} y = {
{'1'},
{'4'}
};
В третьем примере инициализируется переменная у типа объединение. Первым элементом объединения является массив; он и будет инициализироваться. Список инициализаторов {'1'} задает значения для первой строки массива (m[0]). Поскольку в списке всего одно значение, то только первый элемент строки массива — m[0][0] —инициализируется символом '1', а оставшиеся два элемента в строке инициализируются по умолчанию нулевыми значениями (символом '\0'). Аналогично, первый элемент второй строки массива m инициализируется значением '4', а остальные элементы инициализируются по умолчанию нулевыми значениями.
Строковые инициализаторы
Существует специальная форма инициализации массива типа char — с помощью символьной строки. Например, объявление
char code[] = "abc";
инициализирует массив code четырьмя символами—'a', 'b', 'c' и символом '\0', который завершает символьную строку.
Если в объявлении размер массива указан, а длина инициализирующей строки превышает указанный размер, то лишние символы отбрасываются. Следующее объявление инициализирует трехэлементный массив code типа char:
char code[3] = "abcd";
В примере только три первые символа инициализатора заносятся в массив code. Символ d и символ '\0' отбрасываются.
Если инициализирующая строка короче, чем специфицированный размер массива, то оставшиеся элементы массива инициализируются нулевым значением (символом '\0').
Символьной строкой можно инициализировать не только массив типа char, но и указатель на тип char. Например, в объявлении
char *ptr = "abcd";
указатель ptr будет инициализирован адресом массива типа char, содержащего символы 'а', 'b', 'с', 'd', '\0'.
Объявление типа
Существует два особых вида объявления, в которых объявляется не переменная или функция, а тип данных. Первый вид позволяет определить тег и элементы структуры, объединения или перечислимого типа. После такого объявления имя типа (тег) может быть использовано в объявлениях переменных и функций для ссылки на этот тип.
Второй вид объявления типа использует ключевое слово typedef. Это объявление позволяет присвоить осмысленные имена типам, уже существующим в языке или создаваемым пользователем.
Объявление типа имеет такую же блочную область действия, как и объявление переменной. Локальное переобъявление имени типа также возможно. Однако теги занимают отдельное пространство имен, а идентификаторы, объявленные посредством typedef, разделяют пространство имен с переменными и функциями.
Объявление тега
Объявление типа структуры, объединения или перечислимого типа имеет такую же синтаксическую форму, как и объявление переменной этих типов, однако в объявлении типа идентификатор переменной (а в общем случае описатель) опущен. Именем типа структуры, объединения или перечислимого типа является тег, который в данном случае обязателен.
Примеры.
/* пример 1 */
enum status {
loss = -1,
bye,
tie = 0,
win
};
/* пример 2 */
struct student {
char name [20];
int id, class;
}
В первом примере объявляется перечислимый тип с именем status. Имя типа может быть использовано в объявлениях переменных этого перечислимого типа. Идентификатору loss явно присваивается значение -1. Идентификаторы bye и tie ассоциируются со значением 0, a win - со значением 1.
Во втором примере объявляется структурный тип с именем student. Объявление типа student позволяет записывать впоследствии лаконичные объявления переменных этого типа, например объявление struct student employee, в котором объявляется структурная переменная employee типа student.
Объявление typedef
Синтаксис:
typedef <спецификация типа> <описатель> {,<описатель>…];
Объявление typedef синтаксически аналогично объявлению переменной или функции, за исключением того, что вместо спецификации класса памяти записывается ключевое слово typedef и отсутствует инициализатор.
Объявление typedef интерпретируется таким же образом, как объявление переменной или функции, однако идентификатор, входящий в состав описателя, специфицирует не переменную или функцию, а тип. Идентификатор становится синонимом для объявленного типа и может употребляться в последующих объявлениях. Другими словами, создаются не новые типы, а имена для специфицированных программистом типов. С помощью typedef может быть объявлено имя для любого типа, как базового, так и составного — указателя, функции, массива.
Объявление typedef для типа указатель на структуру, объединение или значение перечислимого типа, использующее только тег этой структуры, объединения или перечислимого типа, может быть записано раньше, чем данный тег будет определен в программе, однако определение тега должно находиться в пределах области действия этого объявления typedef и до того, как объявленный тип будет использован.
Принято записывать идентификаторы типов, объявленные посредством typedef, прописными буквами, однако это не является требованием языка.
Примеры:
/* пример 1 */
typedef int WHOLE;
/* пример 2 */
В Справочнике приведены краткие биографии около 1400 российских деятелей украинского происхождения, внёсших свой вклад в развитие России. В нём помещены статьи о государственных, политических, общественных и церковных деятелях, революционерах, декабристах, полководцах, флотоводцах и военачальниках, героях войн, космонавтах, писателях, художниках, скульпторах, архитекторах, артистах театра и кино, режиссёрах, композиторах, искусствоведах, спортсменах, учёных, создателях новых технологий и техники. Справочник через биографии деятелей освещает историю Украины и России за период с 1654 г.
В брошюре даны описания и способы применения пехотных противотанковых средств немецкой армии, захваченных нашими войсками. Брошюра поможет нашим бойцам и командирам научиться применять эти средства против танков противника. Настоящее пособие составлено инженер-полковником Клюевым при участии инженер-полковника Панкратьева.
В книге в занимательной форме описывается история чеканки китайских монет с изображением политических деятелей начиная с первых лет революции до прихода к власти коммунистов. В приложении даны советы и рекомендации по переводу надписей на китайских монетах, таблицы наиболее часто встречающихся на монетах иероглифов и примеры их чтения. Книга снабжена большим количеством иллюстраций.
Форматирование файла не завершено (Stribog).Эти не только древние, но и интересные рецепты не потеряли актуальности и в нынешнее время. Правда, хочу заметить, что не все из них безопасны. Особенно те, где используется ртуть и соли тяжелых металлов (в частности это касается раздела «Парфюмерия»). Так что думайте Сами.С уважением, Сергей Каштанов.
Руководство предназначается для изучения тактико-технических характеристик, устройства принципа действия, правил применения, хранения и транспортировки противотанковой мины ТМ-72 и минного взрывателя МВН-72.
rufb2edit 0.0.908 сен 2015http://lifehacker.ru/2015/01/22/chitat-v-3-raza-bystree/web2fb2_201509080815_87756238791.0Учимся читать в три раза быстрее за 20 минут - ЛайфхакерИя Зорина 22 января 2015Учимся читать в три раза быстрее за 20 минутУмение быстро читать освобождает кучу свободного времени. Только представьте, вы можете в три раза быстрее справляться со всей литературой — технической, профессиональной или художественной. А теперь приятная новость: в отличие от большинства навыков, которые нужно осваивать постепенно, скорочтение доступно вам уже через 20 минут тренировки.