Начнем с устранения ваших проблем в терминах, так как из него следует ваше непонимание ситуации. А также с устранения методических проблем.
Главный источник информации о языке - стандарт языка. Не книжки Страуструпа, Майерса, не то, что показывает CLion, IntelliSense и их друзья, а стандарт языка. Не следует делать выводов о работе и устройстве языка из этих источников.
Далее, нет такоего термина "имя массива в C". Есть термин "переменная типа массив". Если вы написали:
int ints[2];
- это у вас массив на стеке. ints при этом имеет семантику указателя, который всегда и гарантированно указывает на 0 элемент в массиве. Понятно, что коль скоро это указатель на стек, записать туда другой указатель (ints=somePointer) нельзя - потому что нигде в программе, на самом деле, этот указатель не хранится - он вычисляется и подставляется компилятором на ходу.
Из этого не следует(!), что переменная типа "массив" не имеет семантики указателя.