我发现了一个计算数字平方的函数:
int p(int n) { int a[n]; //works on C99 and above return (&a)[n] - a; } 返回值n 2。问题是,它是如何做到的?经过一些测试,我发现介于(&a)[k]和之间(&a)[k+1]是sizeof(a)/ sizeof(int)。这是为什么? 问题来源于stack overflow
显然是骇客……但是一种不使用*运算符就对数字求平方的方式(这是编码竞赛的要求)。
(&a)[n] 等效于指向intlocation 的指针
(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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。