In codice:
static int a[3] = {1, 2, 3};
tipo di puntatore non è, ma array di int. Tuttavia, viene automaticamente convertito in puntatore, ad es. in C standard:
Tranne quando è l'operando dell'operatore sizeof o unario e operatore, o è una stringa letterale utilizzata per inizializzare una matrice, viene convertita un'espressione con tipo '' array di tipo '' in un'espressione con tipo '' puntatore al tipo '' che punta all'elemento iniziale dell'oggetto array e non è un lvalue.
Quindi se a è array, che = {1, 2, 3} è l'inizializzazione, non un qualche tipo di array separato. Non so se è specificato esattamente da qualche parte, ma in questo senso è usato in tutto lo standard.
Modifica per chiarire la confusione da alcuni dei lettori: secondo norma di cui sopra, se si scrive:
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
Cosa puntatore ti riferisci? –
Mi riferisco al puntatore "a" (& a [0]). – Silas
L'espressione '& a [0]' a cui 'a' si espande in quasi tutti i contesti non è un lvalue. È un indirizzo e non un puntatore. C'è un solo identificatore definito e questo è l'array. Dato che non esiste un altro identificatore, non c'è nulla per applicare il 'static' a. –