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

标签 c arrays pointers c99 variable-length-array

我找到了一个计算数字平方的函数:

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/

相关文章:

C 字符数组导致段错误

arrays - 返回数组引用的 Swift 函数

sql - 是否有数组的 SQL 参数绑定(bind)?

c - 以下 C 代码有什么问题 - 结构和指针

c - 数组和指针表示法

arrays - 空间中的固定数组大小是 O(n) 还是 O(1)?

c++ - 如何比较成员指针函数与 Microsoft Visual C 中涉及的 DLL 的相等性?

在低级文件复制程序中使用 Gotoxy() 时生成代码错误

c++ - OpenGL Nvidia 驱动程序 259.12 纹理不工作

c - 使用 fscanf 无法从文件中正确读取字符串