So-net無料ブログ作成
検索選択

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言語ポインタ完全制覇 (標準プログラマーズライブラリ)




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

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

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



nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:

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

×

この広告は1年以上新しい記事の更新がないブログに表示されております。