Quindi non dal punto di vista della grammatica (che dice che è un array), ma dell'implementazione.Originariamente inviato da ardito86
Scusate se non l 'ho ribadito, ma intendevo dal punto di vista della grammatica del linguaggio. Quando dichiaro un array di 5 elementi, in linea di massima il compilatore fa così :
1)crea il puntatore costante
2)"pusha "gli elementi sullo stack
3)assegna al puntatore l indirizzo al primo elemento
Tu stai dicendo che "è un puntatore" con mille eccezioni... e guarda caso, queste eccezioni saltano fuori perché non è un puntatore. I casi in cui tu lo usi come un puntatore sono i casi in cui decade ad un puntatore al suo primo elemento, come specificato a §6.3.2.1 ¶3 dello standard C99:Siccome poi non è un puntatore come tutti gli altri, il compilatore nella sua tabella si annota anche la quantità di variabili allocata, da restituire con sizeof.
Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue.Questa è una sciocchezza, quando in un parametro di funzione tu scriviE soprattutto vuole che venga passato alle funzioni con l 'operatore [] e non *
o addiritturacodice:int arr[]
questo viene inteso comecodice:int arr[10]
infatticodice:int * arr
(C99, §6.7.5.3 ¶7)A declaration of a parameter as ‘‘array of type’’ shall be adjusted to ‘‘qualified pointer to type’’, where the type qualifiers (if any) are those specified within the [ and ] of the array type derivation.