- •Базовые типы данных.
- •Сложные типы данных. Перечислимый тип. Пример.
- •Сложные типы данных. Структуры. Пример.
- •Сложные типы данных. Объединения. Пример.
- •6)Первичные операции. Приоритет операции. Пример.
- •7) Условный оператор Оператор if
- •8)Оператор переключатель
- •9)Пошаговый цикл
- •10)Цикл с предусловием
- •21. Указатель, Объявление, Основные операции. Примеры.
- •22. Арифметические операции с указателями. Пример.
- •23. Операции динамического распределения памяти. Примеры .
- •24. Указатели и одномерные массивы. Динамические массивы. Примеры.
- •25. Указатель на указатель. Массивы указателей. Динамические двумерные массивы. Примеры.
- •26. Функции. Прототип функции. Определение функции. Примеры.
- •27.Передача аргументов функции по значению, по ссылке. Примеры.
- •28. Передача аргументов функции по адресу. Примеры.
- •29. Двумерный массив как аргумент функции. Примеры.
- •30. Динамический двумерный массив как аргумент функции. Примеры.
21. Указатель, Объявление, Основные операции. Примеры.
Указатель – переменная, значением которой является адрес ячейки памяти. То есть указатель ссылается на блок данных из области памяти, причём на самое его начало. Указатель может ссылаться на переменную или функцию. Для этого нужно знать адрес переменной или функции. Так вот, чтобы узнать адрес конкретной переменной в С++ существует унарная операция взятия адреса & . Такая операция извлекает адрес объявленных переменных, для того, чтобы его присвоить указателю.
Указатели используются для передачи по ссылке данных, что намного ускоряет процесс обработки этих данных (в том случае, если объём данных большой), так как их не надо копировать, как при передаче по значению, то есть, используя имя переменной. В основном указатели используются для организации динамического распределения памяти, например при объявлении массива, не надо будет его ограничивать в размере.
Принцип объявления указателей такой же, как и принцип объявления переменных. Отличие заключается только в том, что перед именем ставится символ звёздочки *. Визуально указатели отличаются от переменных только одним символом. При объявлении указателей компилятор выделяет несколько байт памяти, в зависимости от типа данных отводимых для хранения некоторой информации в памяти. Чтобы получить значение, записанное в некоторой области, на которое ссылается указатель нужно воспользоваться операцией разыменования указателя *. Необходимо поставить звёздочку перед именем и получим доступ к значению указателя. Разработаем программу, которая будет использовать указатели.
Пример:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int var = 123;
int *ptrvar = &var;
cout << "&var = " << &var << endl;
cout << "ptrvar = " << ptrvar << endl;
cout << "var = " << var << endl;
cout << "*ptrvar = " << *ptrvar << endl;
system("pause");
return 0;
}
Над указателями можно выполнять унарные операции: инкремент и декремент. При выполнении операций ++ и — значение указателя увеличивается или уменьшается на длину типа, на который ссылается используемый указатель.
Пример:
int *ptr, a[10];
ptr=&a[5];
ptr++;
ptr--;
В бинарных операциях сложения и вычитания могут участвовать указатель и величина типа int. При этом результатом операции будет указатель на исходный тип, а его значение будет на указанное число элементов больше или меньше исходного.
Пример:
int *ptr1, *ptr2, a[10];
int i=2;
ptr1=a+(i+4);
ptr2=ptr1-i;
В операции вычитания могут участвовать два указателя на один и тот же тип. Результат такой операции имеет тип int и равен числу элементов исходного типа между уменьшаемым и вычитаемым, причем если первый адрес младше, то результат имеет отрицательное значение.
Пример:
int *ptr1, *ptr2, a[10];
int i;
ptr1=a+4;
ptr2=a+9;
i=ptr1-ptr2;
i=ptr2-ptr1
Значения двух указателей на одинаковые типы можно сравнивать в операциях ==, !=, <, <=",">, >= при этом значения указателей рассматриваются просто как целые числа, а результат сравнения равен 0 (ложь) или 1 (истина).