Aclarado está. Como dijo Carlos, un array guarda los datos consecutivos en su memoria, en vez de guardar un puntero.
Como detalle, si inicializas un array con una constante como ahí has escrito, el compilador automáticamente copia los datos. Lo ves fácilmente si compilas el programa a ensamblador (opción -S con GCC).
La salida para:
int main(){
char array_var[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
}
En mi caso, fue esta (el trozo que afecta al array):
movl $1145258561, 1(%esp)
movl $1212630597, 5(%esp)
movl $1280002633, 9(%esp)
movl $1347374669, 13(%esp)
movl $1414746705, 17(%esp)
movl $1482118741, 21(%esp)
movw $23129, 29(%esp)
movb $0, 31(%esp)
Ya para finalizar, ver que, la primera asignación: "1145258561". En Hexadecimal es 44434241. Separando, se ve lo evidente: 44 43 42 41, son los caracteres DCBA.
Los penúltimos, "23129", "5A59". Y por último, el caracter nulo.
Sin embargo, si declaramos array_var como const char*, obtendremos una salida así:
LC0: .ascii "ABCDEFGHIJKLMNOPQRSTUVWXYZ\0"
movl $LC0, 12(%esp)
Como vemos, solo copia su dirección.