1
Тест 15 тема «Указатели»
1. Заполните пробелы в следующих утверждениях:
a) Указатель – это переменная , которая содержит в качестве своего значения ________ другой
переменной;
b) Для присвоения указателю начального значения можно использовать три значения, _____________
или ________________;
c) Единственным целым, которое может быть присвоено указателю, является ____________.
2. Укажите, справедливы или нет следующие утверждения. Если они ошибочны, то почему.
a) Операция адресации может быть применима только к константам, к выражениям не имеющим
результат, на которые можно сослаться;
b) Указатель, объявленный как void, может быть разыменован.
3. Выполните следующие упражнения, предполагая, что начальный адрес массива – 1002500. Каждая часть
упражнения использует соответствующие результаты предыдущих частей.
a) Объявите массив типа double с именем numbers с 10 элементами и присвойте начальные значения
0.0, 1.1, 2.2, . . ., 9.9. Предполагайте, что определена символическая константа SIZE равная 10.
b) Объявите указатель Ptr, который указывает на объект типа double.
c) Напечатайте элементы массива numbers, используя запись индексов массива.
d) Приведите два различных оператора, которые присваивают начальный адрес массива numbers
переменной указателю Ptr.
e) Напечатайте элементы массива numbers, используя указателя Ptr.
f) Напечатайте элементы массива numbers, используя индексацию указателя Ptr.
g) Напечатайте элементы массива numbers, используя указатель – смещение с именем массива как
указателем.
h) Сошлитесь на четвертый элемент массива numbers, используя индекс массива, запись указатель –
смещение с именем массива как указателем, запись указатель – смещение с Ptr и запись индекса
указателя Ptr.
i) Предполагая, что Ptr указывает на начало массива numbers, определите, на какой адрес ссылается
выражение Ptr + 8? Какое значение хранится по этому адресу?
j) Предполагая, что Ptr указывает на numbers[5], определите, на какой адрес будет ссылаться Ptr после
выполнения операторы Ptr - = 4. Какое значение хранится по этому адресу?
4. Для каждого из следующих пунктов напишите один оператор, который выполняет указанное задание.
Предполагайте, что переменные с плавающей запятой number1 и number2 уже объявлены и что number1
получила начальное значение 7.3. Кроме того, предполагайте, что переменная Ptr имеет тип char*, а
массивы s1 [ 100 ] и s2 [ 100 ] – тип char.
a) Объявите переменную dPtr как указатель на объект типа double.
b) Присвойте начальный адрес переменной number1 указателю переменной dPtr.
c) Напечатайте значение объекта, на который указывает dPtr.
d) Присвойте значение объекта, на который указывает dPtr, переменной number2.
e) Напечатайте значение number2.
f) Напечатайте адрес number1.
g) Напечатайте адрес, хранимый в dPtr. Совпадает ли напечатанное значение с адресом number1?
h) Скопируйте строку, хранимую в массиве s2, в массив s1.
i) Сравните строку s1 со строкой s2.
j) Добавьте 10 символов из строки s2 в строку s1.
k) Определите длину строки s1. напечатайте результат.
l) Присвойте ptr позицию первой лексемы в s2. Лексемы в s2 разделены запятыми.
5. Найдите ошибку в каждом из следующих фрагментов программ и напишите правильный вариант.
Полагайте
int *z_ptr, number;
int mas [ 5 ] = { 1 , 2 , 3 , 4 , 5 } ; int *m_ptr = mas;
a) ++z_ptr; // для дальнейших фрагментов считать, что z_ptr ссылается на массив mas
b) number = z_ptr;
c) number = *z_ptr [ 2 ] ;
d) for ( int i = 0 ; i <= 5 ; i + + ) cout << zptr [ i ] ;
e) ++mas ;
f) char s [ 10 ] ; cout << strncopy ( s , “hello” , 5 ) ;
g) char s [ 12 ] ; strcpy ( s , “Welcome to Odessa”);
h) if ( strcmpy ( string1 , string2 )) cout << “Строки равны”;