トリッキーコードネット トップへ戻る   C/C++, Java, Perl, PHP, JavaScript, アルゴリズム, ショートコーディング, IOCCCコードの解説, 等々

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> トリッキーなコード >> 配列の添字演算子[]をトリッキーに扱う裏技 (C言語)

配列の添字演算子[]をトリッキーに扱う裏技 - (C言語)

配列の添字演算子[]をトリッキーに扱う裏技をご紹介します。

以下のコードを見てください。
 1 : #include <stdio.h>
 2 :
 3 : int main(void)
 4 : {
 5 :     char * p = "ABCDEF";
 6 :
 7 :     printf("%c\n", 3["abcdef"]);
 8 :     printf("%c\n", 2[p]);
 9 :     puts(&1[p]);
10 :
11 :     return 0;
12 : }
なんじゃこりゃ?!こんなコード動くのか?? と思わず唸ってしまいそうですが、 実はこのコード、正常に動作します^^;) 実行結果) 配列の添字演算子[]をトリッキーに扱う裏技 - (C言語) それでは説明に移ります。 Cコンパイラでは、配列arrと添字iに対して、arr[i] は *((arr) + (i)) として解釈されます。 従って配列の添字演算子[]の二つのオペランドは交換可能であり、 arr[i]と書いても i[arr]と書いても同じ意味になります。 ・・・たった3行の説明ですが、初めてこの交換法則を知った人は、非常にビックリしたのではないでしょうか??^^;) この法則を踏まえて冒頭のコードを読んでみると、 7行目の
printf("%c\n", 3["abcdef"]);
printf("%c\n", "abcdef"[3]);
と同義になり、「d」が表示されます。(← 配列は0-baseである事に注意) 同様に8行目の
printf("%c\n", 2[p]);
は、
printf("%c\n", p[2]);
と同義になり、「C」が表示されます。 9行目の
puts(&1[p]);
puts(&p[1]);
と同義になり、p[1]のアドレスをputs()関数に渡している為、"ABCDEF"の2文字目からが表示されます。
         このエントリーをはてなブックマークに追加   


作業効率化・ライフハックのオススメ記事




コンピュータ・テクノロジーのオススメ記事





恋愛・人間関係のオススメ記事




※ 当サイトは、トップページからリンクで辿る事の出来るページに限り、リンクフリーです。
※ 当サイトの閲覧/利用によって生じた如何なる損害も、当サイト管理人は責任を負いません。
※ 当サイトの内容を転載される場合は、当サイトへのリンクをお願い致します。