数の二乗を計算する方法が理解できません。質問する

数の二乗を計算する方法が理解できません。質問する

数値の二乗を計算する関数を見つけました:

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)

ベストアンサー1

明らかにハックですが、演算子を使用せずに数値を二乗する方法です*(これはコーディング コンテストの要件でした)。

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

おすすめ記事