Untitled
unknown
plain_text
3 years ago
2.6 kB
12
Indexable
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
// ссылки и указатели
int a = 10;
int &b = a; // ссылка к ссылке
int *c = &b; // указатели содержат в себе только адреса, поэтому можем присваивать только адрес
// адреса в памяти
cout << &a << endl; // адрес переменной а в памяти
cout << &b << endl;
cout << &(*c) << endl;
cout << *(&a) << endl; // оператор разыменовывания - значение по указанному адресу
// указатели могут быть разных типов int, double, поэтому указатель типа double не может указывать
// на переменную типа int и наоборот
cout << c << endl; // вывод адреса
cout << *c << endl; // вывод содержимого
// НЕ ДОПУСТИМО int *k = 7; целочисленный литерал не имеет адреса в памяти, указатели содержат в себе только адреса
// НЕ ДПУСТИМО int *l = 0x7ffee1f79a28; нельзя присваивать адрес
//Стоит отметить, что оператор адреса (&) не возвращает адрес своего операнда в качестве литерала.
// Вместо этого он возвращает указатель, содержащий адрес операнда, тип которого получен из аргумента
cout << typeid(&a).name() << endl;
// в аутпуте мы ожидаем не int*, а Pi
//i: integer
//Pi: pointer to integer variable == int*
//Ppi: pointer to a pointer to integer variable
// причем ТАК МОЖНО!!
*c = 7;
cout << a << endl << *c << endl;
// массивы
int mas1[5] = {1, 2, 3, 4, 5}; // инициализируем массив, указав все его значения и размер
cout << mas1[3] << endl; // обращение по индексу
int mas2[] = {123, 45, 67, 0, -12, 3, 4}; //будет создан массив достаточно большого размера для хранения инициализации
// индексация начинается с 0
// также можно присваивать новые значения
mas2[3] = 1;
return 0;
}
Editor is loading...