我找到了一个计算数字平方的函数:
int p(int n) {
int a[n]; //works on C99 and above
return (&a)[n] - a;
}
它返回N2的值。问题是,它是怎么做到的?经过一些测试,我发现(&a)[k]
和(&a)[k+1]
是sizeof(a)
/sizeof(int)
。那是为什么?
发布于 2018-03-22 14:55:21
显然是黑客,但是一种不用使用*
操作员(这是编码竞赛的要求)。
(&a)[n]
(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
https://stackoverflow.com/questions/-100007736
复制相似问题