Вы находитесь на странице: 1из 3

Указатели

Каждый байт в памяти ЭВМ имеет адрес, по которому можно обратиться к определенному
элементу данных
Указатель – это переменная, которая хранит адрес другой переменной определенного
типа.
По описанию указателя компилятор получает информацию о том, какова длина области
памяти, на которую ссылается указатель (которую занимает переменная, на которую он
ссылается) и о том, как интерпретировать данные в этой области памяти.
cинтаксис объявления указателей

1.Базовый_тип *Имя_Указателя;
2.Базовый_тип* Имя_Указателя;

int *pa, *pb, *pc;


int* pa;
float* pb;

Инициализация указателей
Указатель можно инициализировать адресом переменной, которая уже определена:

double dvar = 0.0;


double *pvar = &dvar;

Инициализация значением NULL гарантирует, что указатель не содержит адреса,


который воспринимается как корректный, а значение можно проверить в операторе if :
int *pinteger = NULL;
if (pinteger == NULL)
cout << “pinteger is null”;

равнозначная альтернатива инициализировать указатель 0:


int *pinteger = 0;
if (!pinteger)
cout << “pinteger is null”;

Операции над указателями:

•присваивания,
•доступа по указателю (разыменование (*)),
•инкремента или декремента,
•сложение с константой,
•вычитание двух указателей,
•сравнение указателей (одного типа),
•приведение типов,
•получения адреса (&)

Указатели и массивы

Объявляя массив, мы объявляем имя массива как указатель на его первый элемент,
значение которого нельзя изменить (константный указатель).

Ссылки

Ссылка (reference) – псевдоним для другой переменной.


Ссылка имеет имя, которое может использоваться вместо имени переменной. Так как
ссылка – это псевдоним, а не указатель, переменная, для которой она определяется,
должна быть объявлена ранее.
В отличие от указателя ссылка не может быть изменена, чтобы представлять другую
переменную
Ссылка, в отличие от указателя, не занимает дополнительного пространства в памяти и
является просто другим именем величины.
Объявление и инициализация:
Базовый_тип &Имя_Ссылки = Имя_Переменной;

int number = 0;
int &rnumber = number; // ссылка
int *pnumber = &number // указатель

Ссылку, можно использовать вместо имени исходной переменной:

rnumber +=10;
*pnumber +=10; // требуется разыменование

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


изменить.

Указатели на указатели

#include <iostream> // cin cout

using namespace std;

void main()
{

int i = 123;

int *pi = &i;


//pi – указатель на переменную инициализируется адресом i

int **ppi = &pi;


//ppi – указатель на указатель на переменную
// инициализируется адресом указателя pi

int ***pppi = &ppi;


// pppi – указатель на указатель на указатель на переменную
// инициализируется адресом указателя ppi

cout<< i <<endl;
cout<< *pi <<endl;
cout<< **ppi <<endl;
cout<<***pppi<<endl;
}

Во всех заданиях использовать указатели и функции!!!!!


Задание 1.
Инециализируйте одномерный масив из 10 элементов, заполните и выведите в его в двух
различных функциях, а так же найдите все его совершенные элементы с помощью 3
функции.
Задание 2.
В одномерном массиве из 100 элементов определить количество элементов между
минимумом и максимумом.
Найти количество локальных максимумов(элемент, который больше следующего и
предыдущего элементов) и локальных минимумов(элемент, который меньше следующего и
предыдущего элементов).
m = { 16, 78, 99, 6, -29, 19, -52, 65, -88, 51,
-79, -22, 32, -25, -62, -69, -2, -59, -75, 89,
-87, 95, -22, 85, -49, -75, 76, 73, -59, -52,
30, 49, -28, -48, 0, 57, -6, -85, 0, -18,
-97, -21, -95, 64, 22, -2, 69, -84, -1, -71,
-25, 47, 72, 43, 15, -44, 44, 61, 4, 74,
88, -61, 0, -64, -83, 97, 0, 90, 15, 8,
-54, 19, 73, 35, -67, -87, 85, -99, -70, 10,
98, 58, -10, -29, 95, 62, 77, 89, 36, -32,
78, 60, -79, -18, 30, -13, -34, -92, 1, -38 }
Вывести полученное число.
------------------------------------------------
Задание 3.
Из предыдущего одномерного сформировать двумерный массив m2[10][10]. Вывести адреса
всех элементов, равных 0. А так же развернуть эту матрицу на 90 градусов вправо
------------------------------------------------------
было
1 0 0
2 1 0
4 2 0
----------------------------------------------------------
после поворота на 90
4 2 1
2 1 0
0 0 0

--------------------------------------------------
Задание 4. Есть ли в коде ниже ошибки и как их исправить? Что будет выведено на
экран?
int *a;
int b[2];
a = &b[1];
b[0] = 7;
b[1] = 10;
a--;
cout<<*a;
-----------------------------------------------------------------------------------
-----------
Задание 5. Дано число. Найти все простые делители числа. Реализовать задачу с
помощью функции.
-----------------------------------------------------------------------------------
------
Задание 6. Дано число. Найти количество разных цифр в нём. Реализовать задачу с
помощью функции.
-----------------------------------------------------------------------------------
-----------

Оценить