地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

ポインタを早速入門する

ポインタの前に

ポインタの前に、ポインタを理解する上で理解する必要のあるものがひとつあります

それはアドレスです。 もっと簡単に言うならメモリの場所です。

プログラムを作成する際に変数などを作成すると その変数はデータ型に応じて、必要な分だけメモリ上の場所を確保します

これはC言語に限らずどの言語でも言えることなので覚えていて損はないでしょう

C言語ではこのアドレスの場所を変数に「&」記号をつけて表現します ちなみに&をアドレス演算子と言います

#include<stdio.h>

int main(){
    int a = 0;
    printf("変数aのアドレスは%d",&a);
    return 0;
}

ポインタって何?

アドレスはわかった。じゃあ、ポインタってなんのためにある?

その答えは簡単、アドレスの場所を変数に代入するためです

そしてアドレスを格納してる変数を「ポインタ」と言います

さっきのコードで変数aのアドレスは&aとしました では&aで表すアドレスをポインタに代入してみましょう

#include<stdio.h>

int main(){
    int a = 0;
    int* pa;
    
    pa = &a;
    *pa = 1;
    return 0;
}

たったこれだけです。

上記のコードで示したようにポインタの宣言は 変数の型の末尾にをつけるか 変数名の先頭にをつけることで宣言できます

またさっきと同じように「*」をポインタ演算子と言います

それとポインタを宣言した場合には必ずアドレスを代入しましょう 普通のコンソールプログラムならコンパイルエラーか警告になります しかしexeで実行ファイルになっている場合にはそれを実行してはいけません

未定義のポインタに値を代入するということはとても危険なことでシステム自体を破壊してしまうかもしれないからです

ポインタのポインタ

実はポインタのポインタも取ることも可能です

#include<stdio.h>

int main(){
    int a = 0;
    int* pa;
    int** pp;
    
    pa = &a;
    pp = &pa;
    **pp = 1;
    return 0;
}