タグ

pointerに関するkiyo_hikoのブックマーク (6)

  • プログラム初心者にC言語のポインタを不本意ながら教える羽目になったなら、こう教えると良いよ - 偏見プログラマの語り!

    僕がプログラミングに触れた当時は、プログラミングといえば「まず C 言語」でした。それから 10 年以上が経ちました。学校の授業や企業の研修では未だに C 言語を教えているところがあるようです。関数型プログラミング言語という波が来ている 2012 年にもなって未だに C 言語をやっているというのはまるで進歩が無く残念な気もしますが、比較的多くのプログラマに浸透している共通言語を最初に教えるというのは、一方では喜ばしい事だと解釈する事もできるのかもしれません*1。まぁとにかく、意にせよ不意にせよ現場で プログラム初心者に C 言語を教える羽目になった 人がたくさんいて、プログラム初心者なのに C 言語を学ばざるを得なくなった 若者がたくさんいるということです。 C 言語を教えるときに避けて通れないのがポインタで、プログラム初心者が C 言語を学ぶときにやたらとつまずく人が多いのがポインタ

    プログラム初心者にC言語のポインタを不本意ながら教える羽目になったなら、こう教えると良いよ - 偏見プログラマの語り!
  • ポインタの裏話

    ポインタの裏話 岡﨑 直観 okazaki at ecei.tohoku.ac.jp http://www.chokkan.org/ @chokkanorg ポインタの裏話 プログラミング演習A 1 このような説明を 覚えていますか? 知らなくても全く問題ありません ポインタの裏話 プログラミング演習A 2 int x = 0; &xは変数xの「アドレス」 「番地」「住所」を返す 変数x 0 &x メモリ空間, 記憶空間 変数xのアド レス(住所) ポインタの裏話 プログラミング演習A 3 ____ / \ 何言ってたんだこいつ? / ⌒ ⌒\ 番地 アドレス ぬるぽ / (●) (●) \ \ / | 、“ ゙)(__人__)" ) __________ \ 。` ⌒゚:j´ ,/ j゙~~| | | | __/ \ |__| | | | || / , \n||

  • プログラミングの禁じ手Web版 C言語編 - NULLに関するパターン(サルベージ版) - Akio's Log

    C Magazineの「プログラミングの禁じ手Web版 C言語編」を、InternetArchiveからサルベージしました。 プログラミングの禁じ手Web版 C言語編 - NULLに関するパターン http://web.archive.org/web/20070104215659/www.cmagazine.jp/src/kinjite/c/null.html インデックスはこちら プログラミングの禁じ手Web版 C言語編(InternetArchiveよりサルベージ) - Akio’s Log (PR)プログラミング作法 (PR)C言語ポインタ完全制覇 (標準プログラマーズライブラリ) (PR)改訂新版 Cプログラミング診断室 ここから転載です。 NULLとゼロを間違える 深刻度: ★★(中程度) [症状] 具体的な被害は表面化しにくいが,プログラムの保守や改造の段階で「あれ?」となるパ

    プログラミングの禁じ手Web版 C言語編 - NULLに関するパターン(サルベージ版) - Akio's Log
    kiyo_hiko
    kiyo_hiko 2012/01/29
    2つめが最初わからなかったが、初期値のないstaticなポインターはNULLに初期化されるとのこと http://oshiete.goo.ne.jp/qa/754355.html
  • 静的変数(static変数)の初期化 - ソフトウェアエンジニア現役続行

    C言語では、自動変数は明示的に初期化をしないと、その自動変数の値は未定義です。なので自動変数には明示的に初期化をする必要があります。 一方、静的変数(static変数)は明示的に初期化をしないと、0(数値型)またはNULL(ポインタ型)に初期化されます。 int i; /* 何が入っているか分からない */ static int j; /* 0が入っている */ ただし、単一の変数の宣言だったら、たとえ0で初期化されているとはいえ、 static int j; よりも static int j = 0; と明示的に書いた方が可読性が高くて良いでしょう。 しかし、配列を扱うときなどは、このように明示的に表すのが難しく、初期値を省略するのが一般的です。 例えば以下のように char *p[15]; /* 各要素はNULLで初期化されている */ なぜなら、明示的に表そうとすると、 char *

    静的変数(static変数)の初期化 - ソフトウェアエンジニア現役続行
    kiyo_hiko
    kiyo_hiko 2012/01/29
    自動変数は明示的に記述しないと初期化されず、static変数の場合は暗黙的に0またはNULLに初期化される 覚えとこう
  • POINTER「配列とポインタの完全制覇」「C言語 ポインタ完全制覇」

    タイトルは「C言語 ポインタ完全制覇」。 このページの書籍化とはいえ、内容の大半は書き下ろしですので、 既にWebで読んでおられる方にも決して損はさせません。 詳細はこちらへどうぞ。 「C言語 ポインタ完全制覇(第2版)」書籍情報 「C言語 ポインタ完全制覇」書籍情報(旧版) 技術評論社さんによる書籍案内はこちら。 第2版 旧版 修正履歴は、このページの末尾にあります このページについて 全くもって僭越ながら、恐れおおくも偉そうにも、 こんな文書をWWWで公開させていただくことにしました。 この文書は、もともと社内向けの教科書として作成したものです。 私は、一介の文系出身プログラマであり、 特に情報関係の教育を受けたわけでもなく、 プログラミング言語に深い造詣を持っているわけではありません。 この文書にも多くの誤りや、誤解を招く表現があるかと思います。 そのような記述を見付けられた方は、ぜ

    kiyo_hiko
    kiyo_hiko 2012/01/18
    本は現在進行中
  • Cでのポインタの読み方

    Cでのポインタの読み方 Cのポインタの読み方は、ルールを知らないと摩訶不思議です。 ルールを覚えれば、 int (*p[5])[3]; char (*(*fp)(void))(int); なんてのも解読する事ができます。 大事な前程 ポインタを読む際には、「英語で読む」必要があります。 「え~、英語~」 と思う方もいるかもしれませんが、逆に日語で読む方が大変です。 基ルール ルール 後置演算子が優先。 関数の() 配列の[] 前置はあとで。 要は、「後ろに何かあったら、後ろが優先」です。 演算子の英語での読み方 * pointer to ... () function returning ... [] array of ... Lesson 1 まず、演算子が単独で出てくる場合です。 Lesson 1-1 pointer to ... int *p; これは、まずpを見ましょう。 i

  • 1