Advertisement
Guest User

Pointers (1)

a guest
Nov 17th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.71 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. void func();
  6.  
  7. int main()
  8. {
  9.  
  10.     // 1. Разница между типизированными и нетипизированными указателями.
  11.     cout << "1. " << endl;
  12.  
  13.     int b = 5;
  14.     void * ptr_2 = &b; // ptr_2 указывает на область памяти, где хранится b
  15.     cout << "Нетипизированный указатель указывает на область памяти : " << ptr_2 << endl; // область в памяти
  16.     int * ptr_3 = (int*)ptr_2; // чтобы получить значение
  17.     cout << "А если указатель нетипизированный, можно вывести значение, на которое он ссылается : " << *ptr_3 << endl;
  18.     // Нетипизированный указатель может только указывать на область памяти, где хранится переменная
  19.     // Но вывести значение не получится
  20.     cout << endl << endl;
  21.  
  22.  
  23.     // 2. Разница между указателями на данные и на функции
  24.     cout << "2. " << endl;
  25.  
  26.     void(*point)(); // Указатель на функцию (процедуру)
  27.     point = func; // теперь он определен
  28.     point(); // вызываем == выполняем функцию func();
  29.     // ну а примеры указателей на данные были выше
  30.     cout << endl << endl;
  31.  
  32.  
  33.     // 3. Разница между указателем и указуемым объектом;
  34.     cout << "3. " << endl;
  35.  
  36.     int a3 = 5; // указуемый объект
  37.     int *aPointer; // указатель
  38.     aPointer = &a3; // теперь он указывает на объект
  39.     cout << endl << endl;
  40.  
  41.     // 4. Разница между указателями-константами и указателями на константу
  42.     cout << "4. " << endl;
  43.  
  44.     int a4 = 5; // теперь в определенной области памяти лежит значение 5
  45.     // изменить область памяти нельзя
  46.     a4 = 6; // можем изменить значение, поэтому это пример указателя-константы.
  47.  
  48.     const int a41 = 5; // константа. теперь в определенной этой области памяти лежит значение 5
  49.     // и мы не пожем поменять ни значние переменной, ни область памяти
  50.     const int *b4; // указатель. пока он никуда не ссылается
  51.     b4 = &a41; // а теперь он ссылается на константу, то есть он является указателем на константу
  52.     cout << endl << endl;
  53.  
  54.  
  55.     // 5. Особенности работы с многоуровневыми указателями;
  56.     cout << "5. " << endl;
  57.  
  58.     int a5 = 4;
  59.     int *b5 = &a5; // Указатель указывает на область памяти ячейки a5;
  60.     int **c5 = &b5; // указывает на область памяти b5, то есть на указатель b5
  61.  
  62.     cout << a5 << " " << *b5 << " " << **c5 << endl; // ну и это одно и то же, как и ожидалось
  63.     cout << endl << endl;
  64.  
  65.    
  66.  
  67.     // 6. Разница между указателями и ссылками.
  68.     cout << "6. " << endl;
  69.  
  70.     int *a6; // указатель
  71.     int b6 = 5;
  72.     cout << &b6 << endl; // ссылка на адрес, по которому находится объект b6
  73.    
  74.     // Указатели можно переопределить:
  75.     int c6 = 4;
  76.     a6 = &b6;
  77.     cout << *a6 << endl; // выведет 5
  78.     a6 = &c6;
  79.     cout << *a6 << endl; // выведет 4
  80.     // А вот ссылки переопределить нельзя: &c6 = &b6 - неправильно
  81.  
  82.     // Ссылка не может быть null.
  83.     // по той причине, что ссылка появляется, когда мы определяем переменную
  84.     int a61; // Переменная = null, в ссылка на нее уже имеется
  85.     cout << &a61 << endl; // выведет ячейку в памяти, где хранится эта переменная
  86.     cout << a61 << endl; // выведет непонятно что, так как мы не задали значние переменной
  87.  
  88.     // А вот указатель может быть null
  89.     int *b61; // Он никуда не ссылается => null
  90.     // ну а вывести его не получится, так как он не инициализирован
  91.  
  92.  
  93. }
  94.  
  95. void func() {
  96.     cout << "Here is just a function" << endl;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement