Обратите внимание, что в например в python, переменные не базовых типов очень похожи на ссылки в C++.
>>> a = [1, 2, 3]
>>> b = a
>>> b.append(4)
>>> print(b)
[1, 2, 3, 4]
>>> print(a)
[1, 2, 3, 4]
В С++ при присваивании происходит копирование. Вам нужно явно использовать ссылки или указатели чтобы повторить такое же поведение.
Как уже упоминали, для создания массивов (или других структур данных) произвольного размера используется new, который возвращает указатели. В современном C++ это стараются спрятать за классами контейнеров (vector, map, ...) и умными указателями. Но внутри у них лежат те самые указатели.
Тема большая и заслуживает несколько лекций. Я читал, что товарищи из яндекса сделали достаточно хороший курс. Гуглите "Белый пояс C++".