【ポインタ】C言語の小ネタ
Twitterで以前出題したこの問題。
わりと反響をいただいたのでブログにも書こうと思います!
【問題】
以下のC言語で書かれたプログラムを実行すると、なんと表示されるでしょうか?
#include <stdio.h>
int main(void){
int list[4] = {1,2,3,4};
printf("%d\n",0[list]);
return 0;
}
「実行すれば分かるでしょ」
….その通りです笑
少し考えれば分かるかも…?
しかしながら知らない人は「そんな書き方ないだろ!」「考えるだけ時間の無駄だ!」と思うかもしれません。
確かに。
それでは実際に実行してみましょう!
今回はオンラインで簡単にプログラムを実行できるpaiza ioを使って実行してみたいと思います!
paiza ioのリンクを貼っておきます。
<リンク>
https://paiza.io/ja/projects/new
ここに先ほどのCプログラムを貼り付けます。
左上に丸いボタンがありますが、これをクリックして「C」に変更しておきましょう。

貼り付けができたら下の「実行」ボタンを押して実際に動かしてみましょう!
ポチッとな!!
…..できたでしょうか?
しっかりとコピペできたならば通ったと思います。さて、実行結果を見てみましょう!

出力は「1」になっています!これは「list[0]」の場合と同じ出力です。
では5行目の「0[list]」を「3[list]」にしたらどうなるでしょうか?
さっそく試してみましょう!
プログラムの5行目を書き換えて「3[list]」にします。

プログラムを書き換えたら先ほどと同じく「実行」ボタンを押してプログラムを動かしてみましょう!

先ほどと違い、「4」と出力されましたね!
これは「list[3]」と同じ出力になります。
だいたい分かってきたでしょうか?配列名(ここではlist)と添え字は逆転させても同じ表示になるんです!
これは一時期学生プログラマ界隈で流行ったネタですね!
C言語のポインタの仕様でこういったことが可能になります。
糖衣構文の「ポインタへの配列風アクセス」の中でも説明されているのでぜひ見てみてください!
https://ja.wikipedia.org/wiki/%E7%B3%96%E8%A1%A3%E6%A7%8B%E6%96%87
「添え字と配列名を反対にして書くことができる」とはいっても、可読性が落ちますので、普段のプログラムでは使用しないようにしましょう笑
最近のコメント