указатель

Ответить
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

указатель

Сообщение ya »

Указатель - это особый вид переменной, который хранит адрес другой переменной того же типа

Код: Выделить всё

int int_var{43};
int *p_int{&int_var}; // инициализация указателя другой переменной
std::cout << *p_int << std::endl; // выведет значение указателя
Выделяет память для указателя ключевым словом new, высвобождает память словом delete

Код: Выделить всё

int *p_num4{nullptr};
p_num4 = new int(23);
...
delete p_num4;  // высвобождает память
p_num4 = nullptr; // сброс данных в памяти
нельзя использовать delete дважды на один и тот же указатель
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Безопасное использование нулевых указателей

Сообщение ya »

Безопасное использование нулевых указателей

Код: Выделить всё

int *p_number{}; // Инициализация указателя на неявный адрес в памяти
p_number = new int(7);

if(!(p_number==nullptr))
{
	std::cout << "Указатель p_number ссылается на правильный адрес в памяти : "<< p_number << std::endl;
	std::cout << "Указатель *p_number имеет значение : "<< *p_number << std::endl;
		
}else
{
	std::cout << "Указатель p_number ссылается на недопустимый адрес в памяти : "<< std::endl;
}
delete p_number;
nullptr;
Можно вызвать delete, предварительно проверив существование указателя на адрес в памяти

Код: Выделить всё

int *p_number1{};
delete p_number1;

if(p_number1)
{
	delete p_number1'
	p_number1 = nullptr;
}

ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: указатель

Сообщение ya »

имяТипа * имя указателя = new имяТипа ;

инициализация указателя типом int в свободной области памяти за счёт конструкции new int :

Код: Выделить всё

int * ps = new int;
высвобождение памяти в куче, ранее инициализированной конструкцией new

Код: Выделить всё

delete ps ;// по завершении освободить память

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

Код: Выделить всё

int higgens ;
int * pt = &higgens ;
Переменные nights и pd хранят свои значения в области памяти под названием стек, тогда как память, выделяемая операцией new , находится в области, называемой кучей или свободным хранилищем

Код: Выделить всё

// use_new.срр - - использо вание операции new
#include < iostream>
int main ( )
{
usiпg пamespace std ;
int nights = 1001 ;
int * pt = new int ; // выделение пространства для
int *pt = 1001 ; // сохранение в нем значения
cout << " пights value = " ; // значение nights
cout << nights << " : location " << & nights << endl ; // расположение nights
cout << " int " ; // значение и расположение int
cout << "value = " < < *pt << " : location = " << pt < < endl ;
douЫe * pd = new double ; / / выделение пространства для douЫe
*pd = 10000001.0 ; // сохранение в нем значения double
}
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: указатель

Сообщение ya »

Создание динамического массива с помощью операции new

Код: Выделить всё

int * psome = new int [ 10 ] ; // получение блока памяти из 10 элементов типа int
Операция new возвращает адрес первого элемента в блоке. В данном примере это значение присваивается указателю psome

Код: Выделить всё

delete [ ] psome ; // освобождение динамического массива
Присутствие квадратных скобок сообщает программе , что она должна освободить весь массив, а не только один элемент, на который указывает указатель.

Общая форма выделения и назначения памяти для массива выглядит следующим образом:
имя_ типа имя_указателя = new имя_типа [ количество_ элементов ] ;
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: указатель

Сообщение ya »

Указатели в С++
https://www.youtube.com/watch?v=tIrc9R74cJg

Разыменование массива указателем
https://www.youtube.com/watch?v=UOY9pgTXDFs
Ответить