Интерактивный визуализатор для обучения концепциям указателей и ссылок в C++.
- 🎨 Визуальное представление памяти: Каждая переменная, указатель и ссылка отображаются как цветные блоки
- 🔗 Стрелки связей: Указатели и ссылки соединяются стрелками с целевыми объектами
- 📊 Информация о модифицируемости: Показывает, что можно и нельзя изменять (const анализ)
- 💡 10 примеров: От простых указателей до сложных конструкций с const
- 🖱️ Интерактивность: Вводите свой C++ код и смотрите визуализацию
- 🔵 Синий - Обычные переменные (int, double, etc.)
- 🟣 Фиолетовый - Указатели (int*, int**, etc.)
- 🟢 Зеленый - Ссылки (int&, const int&, etc.)
int a = 42;
int *p = &a; // Указатель на переменную
int &ref = a; // Ссылка на переменнуюВизуализация показывает:
- Переменная
aс значением 42 - Указатель
pсодержит адресa - Ссылка
refтакже указывает наa
int a = 42;
const int *p = &a;Модифицируемость:
- ❌
*pНЕ изменяемо (const int) - ✅
pизменяемо (можно перенаправить на другую переменную)
int a = 42;
int b = 100;
int* const p = &a;Модифицируемость:
- ✅
*pизменяемо - ❌
pНЕ изменяемо (константный указатель)
int a = 42;
int *p = &a;
int **pp = &p;Визуализация показывает:
- Цепочку:
pp→p→a - Две стрелки связывают три объекта
int a = 42;
const int *p = &a;
const int **pp = &p;Модифицируемость:
- ❌
**ppНЕ изменяемо - ✅
*ppизменяемо (указатель p) - ✅
ppизменяемо
int a = 42;
int *p = &a;
int* const &ref = p;Эквивалент: int* const *pointer = &p
Модифицируемость:
- ❌
refНЕ изменяемо (ссылки всегда неизменяемы) - ✅
*refизменяемо (можно менять *p)
int a = 42;
const int *p = &a;
const int* &ref = p;Модифицируемость:
- ❌
*refНЕ изменяемо (const int*) - ✅
refможет указывать на другой адрес
int a = 42;
const int* p = &a;
const int* const &ref = p;Полная защита:
- ❌
*refНЕ изменяемо - ❌
refНЕ изменяемо
-
Запустите приложение:
dotnet run --project CppPointerVisualizer
-
Выберите пример из списка слева или введите свой код
-
Нажмите "Визуализировать"
-
Изучайте визуализацию:
- Каждый блок показывает имя, тип, значение/адрес
- Стрелки показывают связи между объектами
- Справа от блоков - информация о модифицируемости
Const модифицирует элемент справа от него
const int *p // const модифицирует int → *p неизменяемо
int const *p // то же самое
int* const p // const модифицирует * → p неизменяемо
const int* const p // оба неизменяемыconst int* const &refЧитаем: &ref - ссылка на → const - константный → int* - указатель на → const int - константный int
- .NET 8.0 или выше
- Windows (WPF)
CppPointerVisualizer/
├── Models/
│ ├── MemoryObject.cs # Модель объекта в памяти
│ └── MemoryState.cs # Состояние всей памяти
├── Parser/
│ └── CppPointerParser.cs # Парсер C++ кода
├── Visualization/
│ └── MemoryVisualizer.cs # Визуализация на Canvas
├── MainWindow.xaml # UI интерфейс
└── MainWindow.xaml.cs # Логика приложения
Текущая версия поддерживает:
- Простые переменные (int, double, etc.)
- Указатели любого уровня вложенности
- Ссылки на переменные и указатели
- Const модификаторы в различных позициях
Не поддерживается:
- Сложные выражения инициализации
- Структуры и классы
- Массивы
- Арифметика указателей
- Динамическое выделение памяти (new/delete)
- Поддержка ANTLR для полного парсинга C++
- Анимация изменений памяти
- Пошаговое выполнение кода
- Поддержка структур и классов
- Экспорт визуализации в PNG/SVG
Создано для помощи новичкам в понимании сложных концепций указателей и ссылок C++.
MIT




