旧・技術者見習いが一人前の技術者を目指す

制御系エンジニア経験3年、webエンジニア1年目。技術まわりのことを書きます。

C言語ポインタ完全制覇、読了(ポインタの概念がわかる良著)

C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

↑の本を読んだので感想等。

[なぜ読んだか]
体系的に一度もポインタについて学んでいなかったので、そろそろしっかり学んでおくかという気になった。

[私のポインタに対する理解(読む前)]
会社ではC言語を使って開発をしている。
さすがにもう2年以上C言語を使っているので、ポインタの使い方くらいは理解できている、という感じ。
(研修で初めてポインタに触れたときも、実はあんまりポインタに苦しめられた覚えはない。)

[本の感想]
だいたい知っていることが書かれていたが、C言語はメモリをどう確保するのか、という点については初めて知れたので良かった。
どのタイミングでどこに(スタック or ヒープ)メモリを確保して、いつまで保持しておくのかなど、普通に使っているだけではわからないことなので、テストコードと共に解説がしっかり書いてあるのは本当にありがたかった。
メモリ管理=内部で勝手に行われてること=ブラックボックス、みたいに捉えているのはもったいないので、この本を読んで克服しましょう。せっかくの C 言語なんだし。

この本を読むことで、自信を持って他人にポインタの使い方や仕組み?を教えてあげられるようになると思う。

なお、いろいろなところで書かれているが、初心者がいきなり読むにはきつい。
きついというか、つまらないと思う。


[面白かったこと]
以下のコードを見ていただきたい。

#include <stdio.h>

int main (void)
{
    int     array[4] = {0, 1, 2, 3}; 

    printf("array[3] = %d\n", array[3]);    // 当然 array[3] は 3
    printf("array[3] = %d\n", 3[array]);    // じゃあこれは???                                                                                          
    return 0;
}

どちらも同じ出力になるんですねこれが。
hoge[i] という書き方は、シンタックスシュガーと呼ばれ、コンパイラは *(hoge+i) に展開してしまうそう。
なので、一見意味不明な i[hoge] という書き方でも警告は出ないし、ましてやエラーにもならないんですね。
これは面白い。