Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вказівники та посилання.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
857.42 Кб
Скачать

6. Операція пересування вказівника

Ще однією дуже важливою операцією є додавання, або операція пересування вказівника. Так, наприклад в наступному коді

int *p;

...

p++;

значення вказівника p збільшене на одну “умовну” одиницю, яка рівна розміру типу, на який посилається вказівник. Тобто в нашому прикладі адреса, яка зберігалась в p, була зільшена на величину sizeof(int).

7. Використання вказівників з модифікатором const

С++ допускає використання вказівників з модифікатором const. Це дає можливість:

а) огoлосити постійним вказівник

int* const j = &i;

Приклад 5

#include <stdio.h>

#include <windows.h>

int main()

{

int i=3;

int t=4;

int* const j = &i;

printf ("i=%d\n",i); // i = 3

*j=2; // змінити значення на яке посилається вказівник

printf ("i=%d\n",i); // i = 2

j=&t;

printf ("t=%d\n",t); // t = 4

*j=5; // змінити значення на яке посилається вказівник

printf ("t=%d\n",t); // t = 5

system("pause");

}

Скомпілюйте наведений приклад.

б) оголосити постійним значення, на яке посилається вказівник

const int *j = &i;

Приклад 6

#include <stdio.h> // Потокове введення-виведення

#include <windows.h>

int main()

{

int i=3;

const int *j = &i;

printf ("i=%d\n",i); // i = 3

*j=2; // змінити значення на яке посилається вказівник

printf ("i=%d\n",i); // i = 2

system("pause");

}

Скомпілюйте наведений приклад.

або

const char *c = "FFFFFFF";

Приклад 7

#include <stdio.h>

#include <windows.h>

int main()

{

const char *c = "FFFFFFF";

printf ("c=%s\n",c); // i = 3

*c=2; // змінити значення на яке посилається вказівник

printf ("c=%s\n",c); // i = 2

system("pause");

}

Скомпілюйте наведений приклад.

в) обидва об'єкти оголосити постійними

const int n=5;

const int* const j = &n;

const char* const c = “FFFFFFF”;

Приклад 8

#include <stdio.h>

#include <windows.h>

int main()

{

const int n=5;

const int* const j = &n;

const char* const c = "FFFFFFF";

printf ("c=%s\n",c); // c = “FFFFFFF”

*c="bbbbb"; // змінити значення на яке посилається вказівник

int a=7;

j=&a;

system("pause");

}

Скомпілюйте наведений приклад.

Використання модифікатора const є одним з видів захисту значення вказівника та значеня на яке він посилається. Проте як не дивно, це захист дуже легко обійти, наприклад

Приклад 9

#include <windows.h>

#include <clocale>

#include <iostream>

void main()

{

setlocale (LC_CTYPE,"rus");

const int i = 1;

const int* const pi = &i;

std::cout<< "Початкове значення i: "<< i<<std::endl;

*(int*)&i = 2;

std::cout<< "Модифiковане значення i: "<<*pi<<std::endl;

system("pause");

}

Скомпілюйте наведений приклад.

8. Деактивації дії модифікатора

Для того щоб відновити значення i, треба провести операцію “синхронізації”

*(int*)&i = i;

cout<< "Синхронізоване значення i: "<< *pi<<endl;

Приклад 10

#include <windows.h>

#include <clocale>

#include <iostream>

void main()

{

setlocale (LC_CTYPE,"rus");

const int i = 1;

const int* const pi = &i;

std::cout<< "Початкове значення i: "<< i<<std::endl;

*(int*)&i = 2;

std::cout<< "Модифiковане значення i: "<<*pi<<std::endl;

*(int*)&i = i;

std::cout<< "Синхронiзоване значення i: "<< *pi<<std::endl;

system("pause");

}

Скомпілюйте наведений приклад.