SSブログ

C言語のポインタ [プログラミング]

次の2つの宣言の違いがわかるでしょうか。
  int *foo[10]; // ①
  int (*bar)[10]; // ②
①は、int型へのポインタの配列(要素10個)、②はint型の配列(要素10個)へのポインタです。私はC言語のポインタに関する書籍を2冊持っているのですが、それぞれの本のCの宣言の解読の仕方に関する説明の違いが面白かったです。
書籍1「C言語 ポインタ完全制覇」
 この本では次のように書かれています。

 (a) まず、識別子(変数名または関数名)に着目する(②の例ではbar)
 (b) 識別子に近い方から、優先順位に従って派生型(ポインタ、配列、関数)を解釈する。優先順位は以下のようになっている。
   ⅰ)宣言をまとめるための括弧
   ⅱ)配列を意味する[]、関数を意味する()
   ⅲ)ポインタを意味する*
 (c) 派生型を解釈したら、それを「of」または「to」または「returning」で連結する。
 (d) 最後に、型指定子(左端にある、intとかdoubleとか)を追加する。

 さらにこの後に解読の具体例の解説があり、最後に7種類の宣言の例が書かれています。

書籍2「C言語 ポインタが理解できない理由[改訂新版]」
 この本では、次のようなサンプルプログラムを載せています。

#include <stdio.h>

int main(void)
{
    int array[10];
    int *p_int;
    Int (*p_array)[10];

    p_int = array;
    p_array = &array;

    printf("p_int=%p\n,p_int);
    printf("p_array=%p\n,p_array);

    p_int++;
    p_array++;

    printf("p_int=%p\n,p_int);
    printf("p_array=%p\n,p_array);

    return 0;
}

「配列へのポインタ」の意味を理解するには良いサンプルかもしれませんが、いろいろなCの宣言への理解を深めることは難しいですね。書籍2はわかりやすいですが、初級者向き、書籍1はちょっと難しいけれど中級者へのステップアップと思います。



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

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

  • 作者: 前橋 和弥
  • 出版社/メーカー: 技術評論社
  • 発売日: 2001/01
  • メディア: 単行本



C言語 ポインタが理解できない理由 [改訂新版] (プログラミングの教科書)

C言語 ポインタが理解できない理由 [改訂新版] (プログラミングの教科書)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/04/08
  • メディア: 単行本(ソフトカバー)



C言語のおすすめ本 [プログラミング]

 C言語の書籍は非常にたくさんあるが、おすすめの本を1冊あげよと言われたら、これをあげたい。

林晴比古 「新訂 新C言語入門 シニア編」ソフトバンク クリエイティブ

 この本の最大の特徴はC言語の文法を網羅的に記述していることだ。何かC言語でわからないことがあったら、とりあえずこの本で探してみることができる。ネットで検索する方もいるだろうが、ネットだとその情報は本当に正しいのか、はっきりしない場合も多い。

 この本は、2004年に改訂されているので、C99には対応していない。その点を不満に思う方は、JIS規格を参照するのがいいだろう。

 プログラミングを学習するには、文法書だけでは不可能だ。入門書、プログラム演習書などをはじめとして、ありとあらゆる本が出版されている。しかし、その多くは内容が理解できたら、読まなくなってしまう。その点この本は、対応規格が時代遅れにならない限り、ずっと使い続けられる。初心者には理解が難しいかも知れないが、この本がマスターできたら、自信を持ってC言語中級者を名乗れるだろう。

 
新・C言語入門 シニア編 (C言語実用マスターシリーズ)

新・C言語入門 シニア編 (C言語実用マスターシリーズ)

  • 作者: 林 晴比古
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2004/02
  • メディア: 単行本



タグ:c言語 入門

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。