お茶漬けびより

学んだことを整理する場所です。主に、C++, Unreal Engine 4 (UE4) を扱います。

Re:ゼロから始めるポインタ入門 #0

仕事でC言語を使っていて、ポインタでたまに分からなくなる時があるので、整理するために書き起こすことにしました。

何回かに分けてポインタを復習していく予定です。
今回は、準備運動なのでポインタとあまり関係ありませんが、知っていると理解しやすいと思い、書きました。

一応断りを入れておきますが、中身の正確さは保証しません。
理解のきっかけにしてもらって、正確な情報は書籍などで入手してください。

環境

まず環境ですが、C言語を書けて実行できるなら何でも構いません。
自分は、

で行っています。

変数と型

知っていたら読み飛ばして大丈夫です。

変数

変数とは、不定値のことです。つまりその時々によって、値が変化するということです。 定数の逆ですね。プログラミング言語の中では、値を入れるための器のようなものです。 C言語だと以下のようにして、定義します。

int variable = 10;

これは、variable という変数に 10 という値を入れたという意味になります。 で、variable の手前にある int というのは、変数の型を決めるためのキーワードです。 int だと、整数の値を入れる専用の器を用意することになります。

他にも文字型や浮動小数点型があります。これらの違いは何かというと、「器の大きさ」と その中に入っている「値の表現の違い」を決めています。 まず、「器の大きさ」ですが、値を入れる場所を作るということは、その場所が必要になります。 その場所はもちろん有限です。いわゆるメモリがその場所になります。その中の一部を借ります。 で、今回の int はどれだけ借りるかというと、4Byte です。 bit で表すと 1Byte8bit なので、 32bit ですね。

文字型の char だと、1Byte です。int の中には 2 種類の型があり short intlong int があります。 short2Bytelong4Byte です。long intint は同じ大きさになります(環境によっては変わるかも)。 他にも型がありますが、気になる方は調べて下さい。

ここからは、正直ポインタと関係はあまりないので読み飛ばして大丈夫です。

次に表現の違いですが、変数の中に入っている値は、すべて 2 進数で表されています。 2 進数とは、0 と 1 で表現する数字です。2 の基数で表現するので 2 進数 なのですが、 あまり気にする必要はないでしょう。

で、先ほどの

int variable = 10;

ですが、10 はマシンから見れば、2 進数 で表すので、1010 です。 これを人でも理解しやすいように 10 進数 で扱えるようにしているに過ぎません。 それで、表現の違いについてですが、この値を型によって意味を変えているだけです。 何が言いたいかというと、中に入っている値は同じでも型によって意味が変わるということです。

では、まず以下のコードをビルドして実行してみましょう。

#include <stdio.h>

int main()
{
    int variable = 65;
    printf("variable: %d\n", variable);
    return 0;
}

実行すると variable: 10 と表示されると思います。
次に以下を実行して下さい。

#include <stdio.h>

int main()
{
    int variable = 65;
    printf("variable: %c\n", (char)variable);
    return 0;
}

結果は、どうでしょうか。 variable: A と表示されましたか?
つまり、 int 型の 65 というのは、char 型だと A になるのです。
以下のように意味を変えていると見た方いいかもしれません

【2進数から整数型】 0100 0001 → 65
【2進数から文字型】 0100 0001 → A

しっくり来なくても大丈夫です。ポインタとはあまり関係ありませんので。 ただ、知ってると面白いかなと思って書きました(面白くなかった? ごめんなさい……)。

おわりに

今回は以上です。 書き終わってから思いましたが、ポインタと関係あるのか微妙ですね。 ただ、2進数が分かっているといろいろ便利なので、消さずに残しておこうと思いました。 2進数の計算は、Widnows標準の電卓で設定をプログラマーに変えると計算できるので 正確に計算できる必要はないですが、2 進数の計算と 2 の乗数の 10 乗と 5 乗は覚えておくと便利です。