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

Тест 14 тема «Указатели»

1. Напишите выражения, которое выводит адрес переменной test/


2. Адреса смежных в памяти переменных типа float отличаются на ____________.
3. Указатель это:
a) адрес переменной;
b) обозначение переменной, которая будет доступна следующей;
c) переменная для хранения адреса;
d) тип данных для адреса переменных.
4. Напишите выражения для:
a) адреса переменной var;
b) значения переменной, на которую указывает var;
c) тип данных указателя char.
5. Адрес это - __________________, а указатель – это ________________.
6. Напишите определение для переменной указателя на double.
7. Указатели полезны при ссылке на адреса памяти. Которые не имеют ____________.
8. Пусть указатель testptr указывает на переменную testvar. Напишите выражение, которое
позволит получить значение переменной testvar, не используя при этом ее имя.
9. Звездочка, расположенная после имени типа данных, означает ________________.
Звездочка, расположенная перед именем переменой, означает ________________.
10. Выражение *test означает:
a) указатель на переменную test;
b) разыменование переменной test.
11. Является ли правильным следующий код? Объясните свой ответ.
int intvar=100;
int *intptr;
cout<<*intptr;
12. Есть ли разница между intarr[3] и(intarr+3)?
13. Напишите код, который используя указатели, выводит каждое значение массива intarr,
имеющего 10 элементов целого типа.
14. Пусть intarr массив целых элементов. Почему выражение intarr++ не правильно?
15. Предположим, что переменная ted имеет тип double. Объявите указатель на ted и используйте
его для вывода значения этой переменной.
16. Используя указатели, напишите небольшую программу для копирования 80 символов строки s в
строку s1.
17. Первый элемент строки это:
a) имя строки;
b) первый символ строки;
c) длина с троки;
d) имя массива, содержащего строку.
18. Предположим, что treacle является массивом 10 переменных типа float. Объявите указатель на
первый элемент массива treacle, и используйте указатель для вывода значений первого т
последнего элемента массива.
19. Является ли следующий код допустимым? Если да, то что он выведет на экран?
cout<<(int*)”home of the jolly byres”;
20. Операция new:
a) возвращает указатель на переменную;
b) создает память с именем new;
c) получает память для новой переменной;
d) позволяет узнать, сколько памяти свободно на данный момент.
e) использование операции new может привести к меньшим ______________памяти, сем
использование массива.
21. Операция delete возвращает ________________операционной системе.
22. Напишите определение массива arr из 8 указателей, которые указывают на переменные типа float.
23. Напишите фрагмент кода, который динамически определяет структуру типа Fish описывающего рыбу
(структура должна включать вид, вес в целых граммах и длину в долях метра), а затем считывает
значение для элемента этой структуры, описывающего вид.

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 << “Строки равны”;

Вам также может понравиться