Студопедия — Укажите способы инициализации указателей, используя адрес памяти в явном виде
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

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






54. Укажите способы инициализации указателей, используя операции new и new[].

int *p;

p = new int;

int *a;

a = new int [size];

55. Опишите использование операций delete и delete[].

Операции delete и delete[] предназначены для очистки неиспользуемой памяти при ручной работе с динамической памятью. Т.е. для удаления элементов созданных при помощи команд new и new[] соответсвенно.

delete имя указателя;// удалить область памяти по адресу

delete []имя указателя;// удалить массив по адресу

56. Проинтерпретируйте выражение int *(*p[10])()

Массив из 10 указателей на функции которые ничего не принимают и возвращают указатель на int.

57. Проинтерпретируйте выражение int *(*p[10])(int *)

Массив из 10 указателей на функции которые принимают указатель на тип int и возвращают указатель на тип int.

58. Укажите особенности выполнения операций ++ --

Оператор ++ увеличивает на 1 значение переменной, которая стоит справа (слева) от него. (Стоит заметить, что при использовании с указателями данный оператор увеличивает значение указателя не на единицу, а на n, где n – размер в байтах того типа данных, на который указывает указатель).


Данный оператор имеет две формы: префиксную и постфиксную. Различие в том, что происходит раньше: использование значения переменной в выражении или же инкремент переменной.
Наприме:
1)
int x, y = 10;
x = ++y; // префиксная форма – сначала происходит инкремент переменной y, а затем полученное значение присваивается переменной x
cout << x << " " << y;
В итоге в консоль будет выведено:
11 11
2)
int x, y = 10;
x = y++; // постфиксная форма – сначала значение y, равное 10, присваивается переменной х, а затем происходит инкремент переменной у.
cout << x << " " << y;
В итоге в консоль будет выведено:
10 11
Обе формы возвращают значение того же типа данных, что и операнд. Но важное различие заключается в том, что значение, возвращаемое префиксной формой, является l-value, в то время как значение, возвращаемое постфиксной формой оператора ++, не является l-value.
Справка:
l-value - это то, чему можно присваивать значение, т.е. выражение, которое может быть расположено слева от оператора присваивания (=). На самом деле это не совсем так, но для понимания проще всего.

Формально, l-value - выражение типа, отличного от void, ссылающееся на область памяти. При этом l-value может быть и не модифицируемым. Например, переменная, объявленная как const является l-value, однако ее значение нельзя изменять:

const int i = 0;
i = 1; // error C3892: 'i': you cannot assign to a variable that is const

l-value может быть:
- идентификатор переменной любого из следующих типов:
- целочисленного
- с плавающей точкой
- указатель
- структура (struct)
- или союз (union)
- выражение с индексом ([ ]) не являющееся само массивом
- обращение к члену (–> или.)
- выражение взятия значения (*) не являющееся массивом
- любое l-value в скобках
- любое l-value со спецификатором const (немодифицируемое l-value)
То есть можно считать, что префиксная форма возвращает ссылку на операнд (имеющий уже измененное значение), а постфиксная форма возвращает просто значение операнда (причем не измененное значение, так как инкремент будет произведен позже).
То же самое касается и оператора – с той лишь разницей, что он осуществляет не инкремент, а обратную операцию - декремент (т.е. уменьшение на единицу).

59. Укажите особенности выполнения операций + - для указателей. Укажите особенности выполне-ния операций ++ -- для указателей.

Операции + и -:

К указателю можно прибавить целое число, причем выражение
p = p + i;
где p – указатель на переменную типа Type, а i – переменная типа int, не означает, что значение указателя увеличится на i.
В такой ситуации значение указатля увеличится на i*sizeof(Type), т.е. произойдет сдвиг указателя на i блоков памяти, какждый из которых по количеству занимаемой памяти равен переменной типа Type.
Аналогично для -.

Перегружена также разность для указателей, которая вернёт кол-во объектов типа, на который указывают указатели, находящихся между ними.
Пусть p1, p2 - указатели на type и имеют адреса c1 и с2 (в интах)
Тогда значение выражения (p2 - p1) равно (c2 - c1) / sizeof(type).

Сложение двух указателей невозможно!!!

Операции ++ и --:

Изменение указателя зависит от размера типа на который он указывает. ++i/--i – l-value, i++/i-- - не l-value.







Дата добавления: 2015-04-19; просмотров: 830. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Почему важны муниципальные выборы? Туристическая фирма оставляет за собой право, в случае причин непреодолимого характера, вносить некоторые изменения в программу тура без уменьшения общего объема и качества услуг, в том числе предоставлять замену отеля на равнозначный...

Тема 2: Анатомо-топографическое строение полостей зубов верхней и нижней челюстей. Полость зуба — это сложная система разветвлений, имеющая разнообразную конфигурацию...

Виды и жанры театрализованных представлений   Проживание бронируется и оплачивается слушателями самостоятельно...

ЛЕКАРСТВЕННЫЕ ФОРМЫ ДЛЯ ИНЪЕКЦИЙ К лекарственным формам для инъекций относятся водные, спиртовые и масляные растворы, суспензии, эмульсии, ново­галеновые препараты, жидкие органопрепараты и жидкие экс­тракты, а также порошки и таблетки для имплантации...

Тема 5. Организационная структура управления гостиницей 1. Виды организационно – управленческих структур. 2. Организационно – управленческая структура современного ТГК...

Методы прогнозирования национальной экономики, их особенности, классификация В настоящее время по оценке специалистов насчитывается свыше 150 различных методов прогнозирования, но на практике, в качестве основных используется около 20 методов...

Studopedia.info - Студопедия - 2014-2024 год . (0.043 сек.) русская версия | украинская версия