2014-02-01から1ヶ月間の記事一覧

ポインターとはなにか

C

C言語のポインターは難しい。理由は、宣言の文法が直感的でないからだったり、ポインターに多種多様な用途があるからだったり、意味の異なる「配列」と故意に似せてあるからだったりするのだろう。でも、とりあえずポインターとは何かについて考える前に、ポ…

ポインターの用途

C

アウト・パラメータ C言語では関数の引数は値で渡される。だから、呼び出された関数が呼び出し元の関数のローカル変数の値を書き換えるには、呼び出し元の側で、その変数の記憶の場所を値として引っ張りだして渡してもらうしかない。 int i; scanf("%d", &i)…

再び、ポインターとはなにか

C

このシンボル名と記憶の場所の対応のきびしさを解決するものがポインターだ。ポインターは型の種別であり、したがって式や値の種別であり、変数の種別だ。変数には本質的なプロパティとして記憶の場所があって、それが評価や代入の時に使用されてプログラム…

C言語の変数とはなにか

C

int i; と書いてみる。これはどういう意味だろう? 関数の中で書いたならこれはローカル変数だ。実行位置がその関数に入ると int 型のサイズのメモリ領域が確保されてそれが i という名前で使えるようになる。変数 i が作られたわけだ。たんに i と書いたな…

変数とはなにか

C

Wikipedia によれば、こういうことらしい。 [A] variable [...] is a storage location and an associated symbolic name [...] which contains [...] a value. https://en.wikipedia.org/wiki/Variable_(computer_science) 「変数とは値を収める記憶の場所…

brainfuck コンパイラで遊んだ

Brainfuck というプログラミングがあります。これは、たった8文字の記号だけから出来ているプログラミング言語です。マシーンモデルも単純で、プログラムコードと、実行位置を表すインストラクションポインタと、バイトの配列であるデータと、「現在のデータ…

円と点の内包関係の判定

「最強最速アルゴリズマー養成講座:あなたの論理的思考とコーディング力は3倍高められる」を読んだら、ある点が円に内包されているか判定する関数があった。 bool checkInside(int x1, int y1, int x2, int y2, int r) { return (x1 - x2) * (x1 - x2) + (y…