Untitled
unknown
plain_text
2 years ago
2.6 kB
5
Indexable
Never
#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; }