Obviously a hack… but a way of squaring a number without using the *
operator (this was a coding contest requirement).
(&a)[n]
is equivalent to a pointer to int
at location
(a + sizeof(a[n])*n)
and thus the entire expression is
(&a)[n] -a
= (a + sizeof(a[n])*n -a) /sizeof(int)
= sizeof(a[n])*n / sizeof(int)
= sizeof(int) * n * n / sizeof(int)
= n * n