new list<int>[20]
динамически распределяет массив из 20 list<int>
объектов и возвращает указатель list<int>*
. Таким образом, вам нужна переменная list<int>*
для получения этого указателя:
list<int> *L = new list<int>[20];
...
delete[] L;
list<int> L[]
не объявляет указатель, он объявляет статический массив неопределенного размера. Единственное, что вы можете присвоить этому, - это список инициализаторов, содержащий нужные элементы массива, поэтому компилятор может определить размер массива:
list<int> L[] = {a_list_object, another_list_object, ...};
list<int> L[100];
объявляет статический массив из 100 list<int>
объектов. Указатели не задействованы.