
5.Контрольні запитання
Яка операція використовується для отримання адреси змінної?
Що таке вказівник?
Поясніть концепцію вказівників у C++. Урахуйте той факт, що об’єкти різних типів займають різний обсяг пам’яті.
Яка операція дозволяє отримати значення, записане за адресою, що міститься у вказівнику?
У чому відмінність між адресою, яка зберігається у вказівнику, і значенням, записаним за цією адресою?
У чому різниця між операцією розіменування і операцією отримання адреси?
У чому різниця між такими оголошеннями: const int *ptrOne й int * const ptrTwo?
Поясніть сенс таких оголошень змінних:
int * pOne; int vTwo; int * pThree = &vTwo;
Вказівники pt1 і pt2 мають той самий базовий тип. Що можна сказати стосовно виразу pt1 + pt2?
Опишіть особливості операції віднімання для двох вказівників.
Як виконуються операція віднімання числа з вказівника?
Що є результатом при виконанні підсумовування вказівника і числа?
Як виконуються операції ++ і --, застосовані до вказівників?
Опишіть особливості вказівника на тип void.
Як виконується операція індексування вказівника?
Опишіть особливості вказівників, що описуються з модифікатором const.
Опишіть особливості імені масиву як вказівника.
Нехай у програмі оголошена змінна yourAge типу unsigned int. Як описати вказівник, який дозволить маніпулювати цією змінною?
Поясніть, яка помилка може приховуватися в наведеному нижче оголошенні змінних:
int * int_ptr1, int_ptr2;
За допомогою вказівника здійсніть присвоювання змінній yourAge значення 17.
Напишіть невеличку програму і опишіть у ній змінну типу int і вказівник на цей тип. Збережіть адресу цієї змінної у вказівнику. Використовуючи вказівник, здійсніть присвоювання цій змінній деякого значення.
Яким буде виведення при виконанні наведеного нижче фрагменту коду?
int *p1, *p2; *pInt = 7; cout << "The value at pInt: " << pInt;
Маємо таку програму:
#include <iostream> using namespace std; int main() { int pInt; *pInt = 7; cout << "The value at pInt: " << *pInt << '\n'; system("pause"); return 0; }
Чи є помилки в цій програмі? У разі позитивної відповіді зробіть пояснення.
Маємо таку програму:
#include <iostream> using namespace std; int main() { int SomeVariable = 9; cout << "SomeVariable: " << SomeVariable << '\n'; int *pVar = &SomeVariable; *pVar = 7; cout << "SomeVariable: " << *pVar << '\n'; system("pause"); return 0; }
Чи є помилки в цій програмі? У разі позитивної відповіді зробіть пояснення.
У програмі зустрілась така послідовність операторів:
double a[100]; double i; for (i = 0; i < 100; i++) a[i] = i;
Чи є помилки в наведеному вище фрагменті програмного коду? У разі позитивної відповіді зробіть пояснення.
У програмі зустрілась така послідовність операторів:
double a[100]; char i; for (i = 0; i < 100; i++) a[i] = i;
Чи є помилки в наведеному вище фрагменті програмного коду? Зробіть пояснення.
У програмі зустрілась така послідовність операторів:
double a[100], *pt = a; pt = -1.221;
Чи є помилки в наведеному вище фрагменті програмного коду? Зробіть пояснення.
У програмі зустрілась така послідовність операторів:
double a[10], *pt; for (int i = 9; i > 0; i--) *(pt + i) = i;
Чи є помилки в цьому коді? Зробіть пояснення.
У програмі зустрілась така послідовність операторів:
double a[100], *pt = a; *pt = true;
Чи є помилки в наведеному вище фрагменті програмного коду? Зробіть пояснення.
У програмі зустрілась така послідовність операторів:
bool a[10], *p_a = a, b[10], *p_b = b;
Для переписування вмісту масиву a в масив b використаний такий оператор:
for (int i = 0; i < 10; i++) for (int j = i; j < i + 1; j++) *(p_b + i) = *p_a + j;
Чи є помилки в наведених вище фрагментах програмного коду? Зробіть пояснення.
Маємо ті ж визначення, що й у попередньому запитанні. Нижче наведений оператор подвійного циклу. Що можна сказати про нього?
for (int i = 0; i < 10; i++) for (int j = 0; j <= i; j++) *(p_b + i) = *(a + j);