Passando attraverso alcune domande di intervista in C, ho trovato una domanda che diceva "Come trovare la dimensione di un array in C senza usare l'operatore sizeof?", Con la seguente soluzione. Funziona, ma non riesco a capire il perché.
#include <stdio.h>
int main() {
int a[] = {100, 200, 300, 400, 500};
int size = 0;
size = *(&a + 1) - a;
printf("%d\n", size);
return 0;
}
Come previsto, restituisce 5.
modifica: le persone hanno indicato questa risposta, ma la sintassi differisce un po ', ovvero il metodo di indicizzazione
size = (&arr)[1] - arr;
quindi credo che entrambe le domande siano valide e abbiano un approccio leggermente diverso al problema. Grazie a tutti per l'immenso aiuto e la spiegazione approfondita!
*((*(&array + 1)) - 1)
sicuro da usare per ottenere l'ultimo elemento di un array automatico? . tl; dr *(&a + 1)
invoca Undefined Behvaior
(ptr)[x]
è lo stesso di *((ptr) + x)
.
&a + 1
non punta a nessun oggetto valido, quindi non è valido.