- •Базовые типы данных.
- •Сложные типы данных. Перечислимый тип. Пример.
- •Сложные типы данных. Структуры. Пример.
- •Сложные типы данных. Объединения. Пример.
- •6)Первичные операции. Приоритет операции. Пример.
- •7) Условный оператор Оператор if
- •8)Оператор переключатель
- •9)Пошаговый цикл
- •10)Цикл с предусловием
- •21. Указатель, Объявление, Основные операции. Примеры.
- •22. Арифметические операции с указателями. Пример.
- •23. Операции динамического распределения памяти. Примеры .
- •24. Указатели и одномерные массивы. Динамические массивы. Примеры.
- •25. Указатель на указатель. Массивы указателей. Динамические двумерные массивы. Примеры.
- •26. Функции. Прототип функции. Определение функции. Примеры.
- •27.Передача аргументов функции по значению, по ссылке. Примеры.
- •28. Передача аргументов функции по адресу. Примеры.
- •29. Двумерный массив как аргумент функции. Примеры.
- •30. Динамический двумерный массив как аргумент функции. Примеры.
22. Арифметические операции с указателями. Пример.
К указателям могут применяться только две арифметические операции: сложение и вычитание. Для понимания арифметических действий с указателями предположим, что p1 - это указатель на целое, содержащий значение 2000, и будем считать, что целые имеют длину 2 байта. После выражения
р1++ ;
содержимое p1 станет 2002, а не 2001! Каждый раз при увеличении p1 указатель будет указывать на следующее целое. Это справедливо и для уменьшения. Например: р1 --; приведет к тому, что p1 получит значение 1998, если считать, что раньше было 2000.
Каждый раз, когда указатель увеличивается, он указывает на следующий элемент базового типа. Каждый раз, когда уменьшается - на предыдущий элемент.
Пример:
int *ptr1, *ptr2, a[10];
int i;
ptr1=a+4;
ptr2=a+9;
i=ptr1-ptr2;
i=ptr2-ptr1;
23. Операции динамического распределения памяти. Примеры .
Динамическое выделение памяти необходимо для эффективного использования памяти компьютера. Например, мы написали какую-то программку, которая обрабатывает массив. При написании данной программы необходимо было объявить массив, то есть задать ему фиксированный размер (к примеру, от 0 до 100 элементов).
В С++ работать с динамической памятью можно при помощи соответствующих функций распределения памяти new и delete.
new - для выделения памяти.
delete - для освобождения памяти.
Операция new создает объект заданного типа, выделяет ему память и возвращает указатель правильного типа на данный участок памяти. Если память невозможно выделить, например, в случае отсутствия свободных участков, то возвращается нулевой указатель, то есть указатель вернет значение 0. Выделение памяти возможно под любой тип данных: int, float,double, char и т. д.
Пример:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int *ptrvalue = new int;
*ptrvalue = 9;
//int *ptrvalue = new int (9);
cout << "ptrvalue = " << *ptrvalue << endl;
delete ptrvalue;
system("pause");
return 0;
}
24. Указатели и одномерные массивы. Динамические массивы. Примеры.
В С++ существует связь между указателями и массивами, и связь эта настолько тесная, что эти средства лучше рассматривать вместе. Любой доступ к элементу массива, осуществляемый операцией индексирования, может быть выполнен с помощью указателя.
Между именем массива и указателем, выступающим в роли имени массива, существует одно различие. Указатель - это переменная, поэтому можно написать pa=a или pa++. Но имя массива не является переменной, и записи вроде a=pa или a++ не допускаются.
Пример:
/* strlen: возвращает длину строки */
int strlen(char *s)
{
int n;
for (n = 0; *s != '\0'; s++)
n++;
return n;
}
Чаще всего операции new и delete применяются для создания динамических массивов, а не для создания динамических переменных. После того как динамический массив стал ненужным, нужно освободить участок памяти, который под него выделялся. После оператора delete ставятся квадратные скобочки, которые говорят о том, что высвобождается участок памяти, отводимый под одномерный массив. Разработаем программу, в которой создадим одномерный динамический массив, заполненный случайными числами. По завершению работы с массивом, он удаляется, таким образом, высвобождается память, отводимая под его хранение.
Пример:
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
int main(int argc, char* argv[])
{
srand(time(0));
float *ptrarray = new float [10];
for (int count = 0; count < 10; count++)
ptrarray[count] = (rand() % 10 + 1) / float((rand() % 10 + 1));
cout << "array = ";
for (int count = 0; count < 10; count++)
cout << setprecision(2) << ptrarray[count] << " ";
delete [] ptrarray;
cout << endl;
system("pause");
return 0;
}