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はちょっと難しいけれど中級者へのステップアップと思います。
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言語 ポインタが理解できない理由 [改訂新版] (プログラミングの教科書)
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2011/04/08
- メディア: 単行本(ソフトカバー)
C言語のおすすめ本 [プログラミング]
C言語の書籍は非常にたくさんあるが、おすすめの本を1冊あげよと言われたら、これをあげたい。
林晴比古 「新訂 新C言語入門 シニア編」ソフトバンク クリエイティブ
この本の最大の特徴はC言語の文法を網羅的に記述していることだ。何かC言語でわからないことがあったら、とりあえずこの本で探してみることができる。ネットで検索する方もいるだろうが、ネットだとその情報は本当に正しいのか、はっきりしない場合も多い。
この本は、2004年に改訂されているので、C99には対応していない。その点を不満に思う方は、JIS規格を参照するのがいいだろう。
プログラミングを学習するには、文法書だけでは不可能だ。入門書、プログラム演習書などをはじめとして、ありとあらゆる本が出版されている。しかし、その多くは内容が理解できたら、読まなくなってしまう。その点この本は、対応規格が時代遅れにならない限り、ずっと使い続けられる。初心者には理解が難しいかも知れないが、この本がマスターできたら、自信を持ってC言語中級者を名乗れるだろう。
林晴比古 「新訂 新C言語入門 シニア編」ソフトバンク クリエイティブ
この本の最大の特徴はC言語の文法を網羅的に記述していることだ。何かC言語でわからないことがあったら、とりあえずこの本で探してみることができる。ネットで検索する方もいるだろうが、ネットだとその情報は本当に正しいのか、はっきりしない場合も多い。
この本は、2004年に改訂されているので、C99には対応していない。その点を不満に思う方は、JIS規格を参照するのがいいだろう。
プログラミングを学習するには、文法書だけでは不可能だ。入門書、プログラム演習書などをはじめとして、ありとあらゆる本が出版されている。しかし、その多くは内容が理解できたら、読まなくなってしまう。その点この本は、対応規格が時代遅れにならない限り、ずっと使い続けられる。初心者には理解が難しいかも知れないが、この本がマスターできたら、自信を持ってC言語中級者を名乗れるだろう。