我找到了一个计算数字平方的函数:
int p(int n) {
int a[n]; //works on C99 and above
return (&a)[n] - a;
}
它返回 n2 的值。问题是,它是怎么做到的?经过一点测试,我发现 (&a)[k]
和 (&a)[k+1]
之间是 sizeof(a)
/大小(整数)
。这是为什么?
最佳答案
显然是一种 hack...但是一种不使用 *
运算符的平方数的方法(这是编码竞赛的要求)。
(&a)[n]
相当于一个指向 int
位置的指针
(a + sizeof(a[n])*n)
因此整个表达式是
(&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
关于无法理解这种计算数字平方的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27828822/