Владимир Волков - Программирование для карманных компьютеров
- Название:Программирование для карманных компьютеров
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Владимир Волков - Программирование для карманных компьютеров краткое содержание
Эта книга предназначена для того, чтобы читатель смог быстро научиться создавать мощные и эффективные приложения для наладонных компьютеров Pocket PC. Рынок программ для карманных компьютеров сейчас бурно развивается, и именно в этой отрасли программист-одиночка может успешно соперничать с большими корпорациями, которые создают программное обеспечение. Прочитав эту книгу, читатель сможет уверенно и быстро разрабатывать достаточно сложные приложения для Pocket PC. Огромное количество разнообразных примеров позволит быстро совершенствоваться и развиваться, обогащая свой опыт работы.
Книга предназначена для начинающих программистов.
Программирование для карманных компьютеров - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Таким образом, последовательный доступ к элементам массива может осуществляться как по индексу, указанному в скобках, так и по указателю на первый элемент массива, который при инкременте указывает на следующий элемент, а при разыменовании выдает значение текущего элемента. Этот механизм используется при дальнейшей работе над примером.
Упражнение 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];
Оператор typedef можно использовать и для именованной структуры, если согласно логике программы в этом есть какой-то смысл.
Внутри скобок для объявления членов структуры используется стандартный синтаксис для объявления соответствующих типов. При этом структура не может иметь в качестве своего члена объект того же типа, что и сама структура, но указатель на такой объект может быть членом структуры. Членом структуры в C++ может быть функция.
Битовые поля структур Битовые поля это определенное количество именованных или не именованных битов, которое является членом структуры (объединения, класса). Объявляется битовое поле следующим образом:type-specifier : width;
В С++ спецификатором типа может быть любое беззнаковое целое.
Объявив битовое поле в структуре, к нему можно обращаться, как к любому другому члену структуры, пользуясь операторами доступа «точка» и «стрелка».
Пользуясь битовыми полями, необходимо учитывать несколько факторов, которые перечислены в следующем списке.
? Код, содержащий битовые поля, не всегда можно перенести на другие платформы, поскольку организация битов в байте и байтов в слове может быть разной в отдельных архитектурах.
? Доступ к битовому полю х при помощи выражения вроде mystruct.x корректен, а получение адреса & mystruct.x невозможно в принципе, поскольку mystruct.x не хранится в байте.
? Битовые поля принимаются для того, чтобы упаковать данные так, чтобы они занимали меньше места. Но для работы с битовыми полями компилятор генерирует дополнительный код, что приводит не только к увеличению размера, но и к замедлению работы программы.
В следующем примере будет объявлена структура, членами которой являются указатель на эту структуру, функция и битовое поле.
Упражнение 4.1 (продолжение)
21. Добавить новый блок в основную рабочую последовательность, код которого приведен в листинге 4.12.
Листинг 4.12//Блок 18
void f6(){
mm[0] = \0;
struct mystruct {
int d;
double e;
unsigned short mybit: 2;
mystruct* s;
int myfunc(int g)
{return g*g;};} mystr;
mystruct* pmy = &mystr;
mystr.s = pmy;
mystr.d = 100;
pmy->e = 300.00;
mystr.mybit = 3;
sprintf(nn,"%f", pmy->e);
strcat(mm, nn);
strcat(mm, « – pmy->e\n»);
sprintf(nn,"%d", mystr.d);
strcat(mm, nn);
strcat(mm, « – mystr.d\n»);
sprintf(nn,"%p", mystr.s);
strcat(mm, nn);
strcat(mm, « – mystr.s\n»);
sprintf(nn,"%d", mystr.myfunc(12));
strcat(mm, nn);
strcat(mm, « – mystr.myfunc(12)\n»);
sprintf(nn,"%d", pmy->myfunc(12));
strcat(mm, nn);
strcat(mm, « – pmy->myfunc(12)\n»);
sprintf(nn,"%d", mystr.mybit);
strcat(mm, nn);
strcat(mm, « – mystr.mybit\n»);
mbstowcs(mstr, mm, 256);
szStr = mstr;
}Этот код будет выполняться при нажатии клавиши 6 на клавиатуре.
Объединения
Объединение объявляется при помощи ключевого слова union. Объединения очень похожи на структуры, и главное их отличие от структур заключается в том, что разработчик может пользоваться только одним из членов объединения в конкретный момент времени. Практически мы можем трактовать объединение как своего рода объект с переключающимся типом или переменную типа variant. В тот момент, когда одному из членов объединения присваивается значение, остальные члены объединения содержат непредсказуемые значения и обращаться к ним не стоит. Результат этого действия нельзя будет предсказать.
Но это не означает, что каждый раз результат будет неверным. Просто память для объединения выделяется по размеру его большего члена и далее для членов объединения распределяется динамически при каждом присваивании только для того члена, которому присваивается значение, внутри одного и того же участка памяти. Значение остальных членов не гарантированно. Оно может сохраниться, а может и перезаписаться новым значением.Среда разработки eMbedded Visual C++ 3.0
Несмотря на то, что среда eVC предназначена для разработки программ для «маленьких» компьютеров, сама среда – вполне серьезный инструмент. Знакомство со средой стоит начать со структуры экрана.
Окна
Главное окно среды представляет собой окно в стиле SDI, когда все прочие документы и окна открываются в главном окне и не могут покинуть его пределы. Таким образом, главное окно является контейнером для других окон. На нем размещены панель инструментов и главное меню (рис. 4.1).
Читать дальшеИнтервал:
Закладка: