&variable
dà posizione della variabile (lo chiamano come P
)
&variable + 1
dà indirizzo del luogo accanto alla variabile. (Chiamare come N
)
(char*)N-(char*)P
dà quanti caratteri ci sono tra N
e P
. Poiché ciascun carattere ha una dimensione di 1 byte, il risultato sopra riportato indica il numero di byte P
e N
. (che è uguale alla dimensione della matrice in byte).
Analogamente, (char*) (a+1)-(char*)a;
fornisce la dimensione di ogni elemento della matrice in byte.
Così il numero di elementi nella matrice = (size of array in bytes)/(size of each element in the array in bytes)
#include<stdio.h>
int main()
{
int a[100];
int b = ((char*)(&a+1)-(char*)(&a));
int c = (char*) (a+1)-(char*)a;
b = b/c;
printf("The size of array should be %d",b);
return 0;
}
Non c'è mai un motivo per cui non è possibile utilizzare 'sizeof'. – Lundin
Sembra che la matrice, che ha 100 elementi, sia effettivamente trattata come elemento 0 di una matrice (senza nome). – enhzflep
Bel trucco, è anche conforme agli standard. – effeffe