Читаем Программирование для карманных компьютеров полностью

ВНИМАНИЕ! Можно также получить адрес элемента массива, следующего за последним. Компилятор C++ спокойно пропускает такой код. Мало того, можно получить как адрес, так и указатель на любой из элементов массива, выходящий за пределы массива как угодно далеко, и даже можно записать туда значение, что рано или поздно приводит к вторжению в «чужую» память и ошибке доступа к памяти с аварийным завершением работы программы или даже всей операционной системы. Поскольку массивы не хранят в себе информации о количестве элементов массива, при такого рода операциях ответственность за не выход за диапазон возложена целиком на программиста.

Таким образом, последовательный доступ к элементам массива может осуществляться как по индексу, указанному в скобках, так и по указателю на первый элемент массива, который при инкременте указывает на следующий элемент, а при разыменовании выдает значение текущего элемента. Этот механизм используется при дальнейшей работе над примером.

Упражнение 4.1 (продолжение)

20. В конец файла MyExp.cpp нужно добавить код, приведенный в листинге 4.11. Указанную функцию нужно объявить в заголовочном файле. Также потребуется добавить еще одну ветку case.

Листинг 4.11

//Блок 17

void f5(){

mm[0] = \0;

//Объявляем массив символов и инициализируем его строкой из 9 элементов

char p[]="Crocodile!";

//Выводим в строку значения элементов массива как символы

for (int i = 0;i<10; sprintf(nn,"%c", p[i]), strcat(mm, nn), i++);

strcat(mm,"\n");

//Устанавливаем указатель на первый элемент массива и, последовательно

//перебирая элементы (увеличивая значение указателя), получаем значения,

//записанные в них в виде целых чисел

for (char* t=p;*t!=0; sprintf(nn,"%u", *t), strcat(mm, nn), strcat(mm," "), t++);

strcat(mm,"\n");

//Устанавливаем указатель на первый элемент массива и, последовательно

//перебирая элементы массива, получаем в строку их адреса

for (char* s=p;*s!=0; sprintf(nn,"%p", s), strcat(mm, nn), strcat(mm,"\n"), s++);

mbstowcs(mstr, mm, 256);

szStr = mstr;

}

Вся функциональность достаточно хорошо описана в комментариях. Но также следует обратить внимание на то, как оформлены циклы. Оказывается цикл for можно весь уложить в одну строку, записав все необходимые операции в заголовок.

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

Структуры

Структуры в С++ – это определенные пользователем именованные коллекции данных разного типа. Структура объявляется при помощи ключевого слова struct, как это показано ниже.

struct mystruct {… };

Членами структуры могут быть данные любого типа и битовые поля , которые не могут использоваться только в структурах, объединениях или классах. Обработка структур в С++ практически ничем не отличается от обработки классов. После объявления структуры определенного типа разработчик может объявить переменную этого типа, как это показано в следующем примере.

struct mystruct{… } s, *ps, arrs[10]; mystruct s1;

Возможно также объявление неименованной структуры. Оно имеет смысл только тогда, когда тут же объявляются переменные этого типа. Для неименованной структуры невозможно объявить переменные этого типа в другом месте. Этот механизм демонстрирует следующий фрагмент кода:

struct {… } s, *ps, arrs[10];

Есть возможность создать typedef для неименованной структуры, как это показано ниже.

typedef struct {… } MYSTRUCT; MYSTRUCT s, *ps, arrs[10];

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных