开发者社区> 问答> 正文

无法理解这种方式来计算数字的平方

我发现了一个计算数字平方的函数:

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

展开
收起
保持可爱mmm 2020-02-07 01:04:34 559 0
1 条回答
写回答
取消 提交回答
  • 显然是骇客……但是一种不使用*运算符就对数字求平方的方式(这是编码竞赛的要求)。

    (&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

    2020-02-07 01:04:46
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
新量⼦⾰命与量⼦计算 立即下载
重新定义计算的边界 立即下载
用计算和数据去改变整个世界 立即下载