Операция delete

Операция используется для явного освобождения выделенного операцией new участка памяти. В нашем случае её синтаксис такой: delete указатель;. Для примера (см. 4.1) delete p; о свобождает ячейку, адрес которой хранился в переменной- указателе (p). Но при этом ячейка p, в которой находится адрес вещественного числа, из памяти не удаляется. В дальнейшем её можно использовать. Но значение как p, а, значит, и *p после выполнения операции не определено.

Операцию delete необходимо использовать только для указателя, получившего значение с помощью new. Например, если

float x; float *q=&x;

то результат операции delete q; непредсказуем. Нельзя использовать эту операцию и для статического массива. Следующий код

const n=10; int a[n]; … delete a;

приводит к ошибке.

Упражнения, тесты.

1. Пусть int t=10; int *p=&t; Какие из следующих операторов допустимы и что они означают (что будет выведено, какое значение примет переменная): 1) cout<< p; 2) p=1000; 3) *p=1000; 4) t*=*p; 5) cout<<(*p); 6)cout <<(*p*=2)?

2. Дан код:

void fun1 (int *x, int &y) { (*x)++; y--;} //1

void main() { int a=5, b=2; fun1 (&a, b); //2

cout<< a<< “ “<< b; getch(); }

Что будет выведено?

Варианты ответов: 1) 6 1; 2) 5 1; 3) 6 2; 4) 5 2; 5) Ошибка в //1;

6) Ошибка в //2; 7) Ошибки в //1 и //2.

3.. Дан код:

void fun4 (int x, int *y) { * y=x*10; } //1

void main() { int a=5, *b=new int (2); //2

fun4 (????????); //3

cout<< a<< “ “<< (*b); getch(); } //4

Что записать в скобках в строке //3, чтобы вывести 5 50?

Варианты ответов: 1) fun4(a,b); 2) fun4(a, &b); 3) fun4(&a, &b);

4)fun4(a, *b); 5) ошибки (указать номера строк).

4. Дан код:

void fun5(int &x, int *y)

{?????????????; } //1

void main()

{ int a=5, *b=new int; //2

fun5 (a,b); //3

cout<<endl<<a<<" "<<(*b)<<endl; //4

getch(); }

Что записать в тексте функции в строке //1, чтобы вывести 5 15?

Варианты ответов: 1) y=x+10; 2) *y=*x+10; 3) *y=x+10; 4)y=*x+10;

5) ошибка в //2 6) ошибка в //3; 6) ошибка в //4.

5. Дан код:

int *p1= new int = 11; int *p2; *p2= new int =11; int *p3= new int[11];

int *p4= new int (11); int *p5= new (int) 11; int *p6= new int:11;

Для каких указателей (p1 — p6) правильно резервируется память для одной целочисленной переменной и выполняется её инициализация?

Г л а в а 2

УКАЗАТЕЛИ И МАССИВЫ

В этой главе изучается связь указателей с одномерными и двумерными массивами, рассматриваются арифметические операции и операции сравнения для указателей на массивы и основанный на них другой метод программирования циклов при работе с одномерными массивами, матрицами и строками. Этот метод явно использует указатели, а не индексы, как это было в первом семестре ([1]). Здесь же рассматривается порядок создания и работы с динамическим одномерным массивом.

Связь указателей и массивов


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: