En código:
static int a[3] = {1, 2, 3};
Tipo de puntero no está, pero matriz de int. Sin embargo, se convierte automáticamente en puntero, p. en estándar C:
Excepto cuando es el operando del operador sizeof o el operador unario, o es un literal de cadena usado para inicializar una matriz, una expresión que tiene tipo '' matriz de tipo '' se convierte a una expresión con el tipo '' puntero al tipo '' que apunta al elemento inicial del objeto de la matriz y no es un valor l.
Así que si a es una matriz, entonces = {1, 2, 3} es su inicialización, no un tipo de matriz separada. No sé si está especificado exactamente en alguna parte, pero en este sentido se usa en todo el estándar.
Editar para aclarar la confusión por parte de los lectores: de acuerdo con la norma citada, si escribe:
int arr[4] = { };
arr[0] = 1; //arr here has here type int*
size_t sz = sizeof(arr); //here it is not type int*, sizeof is exception
Lo puntero se está refiriendo? –
Me refiero al puntero "a" (y a [0]). – Silas
La expresión '& a [0]' a la que 'a' se expande en casi todos los contextos no es un valor l. Es una dirección y no un puntero. Solo hay un identificador definido y esta es la matriz. Como no hay otro identificador, no hay nada para aplicar el 'static 'a. –