
- •1 Основні відомості про вказівники
- •2. Вказівники та посилання
- •Void function_a (char*, int, short*);
- •Int *pi; /* вказівник-змінна на дані типу int */
- •3. Ініціалізація вказівника
- •4. Розіменування та присвоєння
- •5. Void-вказівник
- •6. Операція пересування вказівника
- •7. Використання вказівників з модифікатором const
- •8. Деактивації дії модифікатора
- •9. Подвійний вказівник
- •10. Вказівники і масиви
- •11. Доступ до ділянок динамічної пам'яті
- •12. Звільнення пам'яті
- •8. Операції з вказівниками
- •Int I, *pi; /* pi –змінна-вказівник */
- •13. Динамічні масиви
- •11. Посилання
- •Лабораторный практикум
- •Вопросы без ответов
- •3 Основні операції над вказівниками
- •4 Багаторівнева непряма адресація
- •5 Операції над вказівниками
- •Void main ()
- •Void main()
- •6 Проблеми, пов'язані з вказівниками
- •Int *х; /* змінній-покажчику 'х' виділена оп, але 'х' не містить значення адреси оп для змінної */
- •Int *х; /* х - ім'я покажчика, він одержав оп*/
- •Void main ()
- •9 Масиви
- •1.9.1 Основні поняття
- •Int а[5]; /* оголошення зовнішнього масиву */ main ()
- •9.2 Оголошення та звертання в одновимірних масивах
- •9.3 Оголошення та звертання до багатовимірних масивів
- •Int а[3][4]; /* а - вказівник-константа */
- •10 Масиви покажчиків
- •10.1 Робота з великими масивами
- •Void main()
- •Int *p[200], I, j; clrscr() ;
- •10.2 Вільні масиви та покажчики
- •11 Символьні рядки
- •11.1 Основні відомості про представлення рядків
- •11.2 Функції роботи з рядками
- •1. Функції введення рядків.
- •2. Функції виведення рядків.
- •14 Лекція №14
- •14.1 Вказівники Лекція № 2 - Вказівники та посилання
- •1.2.1. Вказівники
- •6. Вказівники і масиви
- •6.1. Вказівники і адреси
- •6.2. Вказівники і аргументи функцій
- •6.3. Вказівники і масиви
- •6.4. Адресна арифметика
- •6.5. Вказівники символів і функції
- •6.6. Вказівники – не цілі значення
- •6.7. Багатовимірні масиви
- •6.8. Масиви вказівників (вказівники на вказівники)
- •6.9. Ініціалізація масивів вказівників
- •6.10. Вказівники і багатовимірні масиви
- •6.11. Командний рядок аргументів
- •6.12. Вказівники на функції
- •Посібник для початківця про вказівники
- •6. Вказівники і структуровані програмні змінні
- •9. Вказівники типу far
- •10. Вказівники і динамічні змінні (керування пам'яттю)
- •9. Вказівники типу far
- •10. Вказівники і динамічні змінні (керування пам'яттю)
- •8. Вказівники і динамічні змінні (керування пам'яттю)
- •Void* operator new(size_t t)
- •Void operator delete(void* p)
- •Void main()
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");
}
Скомпілюйте наведений приклад.