Всем привет!
Прикольный тут форум, 8 лет прошло, как я недоумевал, почему на форуме программистов в блогах нет раздела Программирование? Вот зашел, а воз и ныне там, опять приходится писать в Разное!
#include "pch.h" #include <iostream> int main() { int i1 = 123; int* i2; //фактически, тут будет храниться адрес в памяти, по которому лежит что-то типа int i2 = &i1; //копируем в указатель адрес i1 //выводим данные в окно консоли, std::cout это поток вывода, аналог функции Print в MQL. std::cout << "i1 = " << i1 << " *i2 = " << *i2 << " i2 = " << i2; // *i2 - это операция разименовывания указателя, то есть достаем данные по адресу i2 }
std::cout << " *(++i2) = " << *(++i2) << " i2 = " << i2;
Черт, вообще-то я хотел показать прикольный видеоролик с троллингом плюсов, но Остапа понесло. Я отключил в компиляторе VS2022 все оптимизации, добавим еще переменную i3 в конец, предположительно компилятор разместит ее по следующему адресу после i2, то есть по нашему *(++i2). Проверим?
int main() { int i1 = 123; int* i2; //фактически, тут будет храниться адрес в памяти, по которому лежит что-то типа int int i3 = 987654321; // наверное компилятор разместит i3 сразу за первыми двумя переменными i2 = &i1; //копируем в указатель адрес i1 //выводим данные в окно консоли std::cout << "i1 = " << i1 << " *i2 = " << *i2 << " i2 = " << i2; // *i2 - это операция разименовывания указателя, то есть достаем данные по этому адресу std::cout << " *(++i2) = " << *(++i2) << " i2 = " << i2; }
std::cout << " *(++i2) = " << *(++i2) << " i2 = " << i2 << " &i3 = " << &i3;
Как видим, компилятор посчитал нужным кинуть i3 по адресу 010FFE18, то есть перед, а не после всех. Ну, бог ему судья. Так вот, на MQL доступ к кишкам программы через указатели закрыт в целях безопасности. Вместо указателей там дескрипторы, которые не указывают на адреса в памяти, это надо четко понимать. Кому захочется поковыряться в кишочках, проект для VS в аттаче.