- •Введение
- •Глава 1. Основы.
- •Int main()
- •1.2. Методика создания программ в Microsoft Visual Studio.
- •Void main(){
- •1.3. Ввод-вывод.
- •1.4. Переменные и константы.
- •Int I; // объявление целочисленной переменной
- •42 // Десятичная константа
- •0X42 // шестнадцатеричная константа, начинается с 0х
- •042 // Восьмеричная константа, начинается с 0
- •1.5. Арифметические операции.
- •Void main()
- •1.6. Встроенные функции. Математические функции. Состав math.H.
- •Void main()
- •Int rand(void); // функция используется без аргумента
- •Глава 2. Операторы и выражения.
- •2.1. Логические выражения и операторы
- •2.1.1. Оператор if else
- •If (условие)
- •If (условие)
- •2.1.2. Конструкция if else if
- •Int number;
- •Int number;
- •2.1.3. Условный оператор.
- •2.1.4. Оператор switch.
- •Int dvalue;
- •2.2. Операторы цикла.
- •2.2.1. Оператор for
- •Void main()
- •Int I; // создаем переменную цикла
- •Void main()
- •Int I; // переменную цикла можно определить и вне цикла
- •2.2.2. Изменение шага цикла
- •Void main()
- •2.2.3. Цикл while.
- •2.2.4. Цикл do while
- •Void main()
- •2.3. Операторы break и continue
- •Void main()
- •Void main()
- •2.4. Типичные ошибки при использовании операторов цикла
- •Глава 3. Производные типы данных.
- •3.1. Ссылки и указатели.
- •Int test; // объявили целочисленную переменную
- •Int & s_test; // ошибка! ссылка не связана с переменной
- •Int *p1; // объявлен указатель на целое с именем p1
- •3.2. Массивы и строки.
- •Int z[10]; //массив из 10 целых чисел
- •Int ar[3]; // объявлен целочисленный массив из 3 элементов
- •Int varr[4]; // объявление массива
- •3.2.2. Многомерные массивы.
- •Int z[3][4]; //массив из 12 целых чисел
- •3.2.3. Строки
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •If(strstr(st,st2)) //если подстрока встречается, выводим
- •3.1.5. Динамическое определение одномерных массивов.
- •3.1.6. Динамические двумерные массивы.
- •3.1.7. Указатели, массивы и арифметика указателей.
- •Int tacs[3];
- •Void main()
- •3.2. Структуры
- •Int age; // элементы структуры
- •Int hours;
- •Int mins;
- •Void main()
- •Int hours;
- •Int mins;
- •Void main()
- •4. Функции, определяемые пользователем
- •4.1. Объявление и определение функции
- •Int max(int , int ); // в прототипе достаточно указать только тип и
- •Void main() {
- •Int MyRand(){
- •Int func(){ return 1;} // правильное выражение
- •Int func2(){return 0.146;} // неправильно, 0.146 преобразуется к int с
- •Void swap(int p, int q)
- •Int bigger(int a,int b)
- •4.2. Передача параметров функций
- •5. Заголовочные файлы.
- •6. Работа с файлами
- •6.1 Простой файловый ввод/вывод
- •6.2 Тонкости работы с файлами
- •7.1. Определение классов.
- •Void main()
- •7.2. Как объявлять функции класса?
- •7.3. Конструкторы и деструкторы классов.
- •8. Графика OpenGl.
- •Void callback Draw()
- •Void main()
- •8.1. Создание анимации с помощью библиотеки xgl
- •Приложения Управление выводом
- •Управление шириной вывода
Int test; // объявили целочисленную переменную
Int & s_test; // ошибка! ссылка не связана с переменной
double & d_test=test; // ошибка! тип ссылки не совпадает с типом
// переменной, на которую ссылается
int & t_test=test; // теперь верно!
Ссылки чаще всего используются в качестве параметров функций и типов возвращаемых функциями значений. Об этом подробнее будет сказано в главе 4.
Адрес переменной нельзя изменить, это константа, однако в С++ определен специальный тип переменных – указатель, который хранит адрес или местоположение переменной в оперативной памяти.
Указатель не является самостоятельным типом, он всегда связан с типом переменной, на которую ссылается. Применяя к указателю операцию * , которая называется разыменованием, получаем значение, которое хранится по данному адресу.
Не удивляйтесь, что один и тот же символ используется для операции умножения и разыменования. Смысл символа понятен из контекста, в котором он применяется.
Следующий листинг поясняет использование указателей.
Int *p1; // объявлен указатель на целое с именем p1
double *p_up; // объявлен указатель на вещественное число
int i =12;
p1 = &i; // указателю p1 присваиваем адрес переменной i;
// выводим значения i двумя путями:
cout<<*p1<<endl;
cout <<i;
// изменяем значение переменной i с помощью указателя
*p1 = 23;
cout << i;
Обратите внимание, что компилятору следует знать, на какой тип переменной ссылается указатель, так как количество байт, отводимое под различные типы переменных, различно.
Работу с переменной, адресом переменной и указателем на переменную можно проиллюстрировать схемой:
П рисваивая указателю адрес переменной, мы даем переменной «псевдоним», с помощью которого получаем доступ к значению переменной.
При объявлении указателя возможны различные способы расположения знака * и пробела:
char *str;
float* param;
long * ini;
Выберите любой вариант по своему вкусу. Например, комбинация char *str; подчеркивает, что *str является переменной типа char. Важно только помнить, что объявление вида
int* pi, ni;
создает указатель pi и обычную переменную ni типа int. То есть необходимо использовать * для каждого объявления указателя!
3.2. Массивы и строки.
Массив ‑ это совокупность однотипных элементов (int , double, char и т.д.).
Для определения целочисленного массива в C/C++ надо написать:
Int z[10]; //массив из 10 целых чисел
Общее форма для объявления массива:
typename arrayName[arraysize];
Здесь typename - тип элементов массива (double, float и т.д.), arrayName ‑ имя массива, arraysize ‑задает число элементов массива и должно быть типа const, либо постоянным выражением, для которого все значения должны быть известны уже во время трансляции1.
Ниже приведенный листинг показывает примеры верного и неверного объявления массивов.
Int ar[3]; // объявлен целочисленный массив из 3 элементов
const int k=11; // объявлена целочисленная константа к
int n, m=4; // объявлены переменные типа целое
n=12;
double z[k],y[3*k]; // верное объявление массивов
double nz[n], ny[m]; // неверное объявление массивов
Элементы массивов в C/C++ всегда нумеруются с нуля. Таким образом, в приведенном в начале параграфа примере массив будет состоять из целочисленных элементов z[0], z[1], z[2], ...z[9]. Индекс внутри квадратных скобок позволяет обратиться к любому элементу массива. При объявлении массива можно сразу инициализировать его элементы:
double mass[3]={1.1, 11.24, 0.45};
Не будет ошибкой и такой вариант инициализации:
int arr[]={14, 0, 6, 12};
В этом случае компилятор самостоятельно подсчитает количество элементов объявленного массива.
При работе с массивами следует помнить, что арифметические операции, как и операцию присваивания, возможно применять только для элементов массива.
int arr[]={14, 0, 6, 12}; // объявление и инициализация массива