C言語 ポインタの概念

C言語

C言語のポインタの概念について解説します

筆者が初めてポインタと遭遇したのが、swap関数でした

そこで、swap関数を題材に説明していきます 下記がコードです

void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;}

int main(void){

swap(&a, &b);

return 0;
}

これを初めて見た時に、 戻り値が、void となっているのであれば、何も処理されないのでは? と思いました。

ところが実際にこのコードを実行すると、ちゃんと swapされます

まず、int *a; とは何者であるかを見ていきましょう

int *a; で宣言された a とは、一般的に「int型の変数を指すポインタ」 と説明されます

この「int型の変数を指す」であったり、「ポインタ」というものが曲者です

ここをもう少し詳しく見ていきます

一旦、一般的な変数の宣言(非ポインタ)を見ていきましょう

int x; x = 1; int x;で宣言された x は、int型の変数で、その変数に格納されている値は、1 です

変数は箱で、その箱の中に格納されているのが値 というイメージです

これはわかりやすいと思います

再び、int *a; に戻りましょう

int *a; で宣言された a は、「int型の変数」ではなく、int型の変数が保存された場所です

例えば、デスクトップ上に、新しいファイルを作成すると、C:\Users\nobby\desktop\新規テキストドキュメント.txt というパスが与えられます。

職場などで、ファイルを受け渡す時に、ファイルそのものをメールに添付して送信する場合と、 ファイルが保存されている場所(パス)を、相手に伝える方法があります

swap(&a, &b); とは、ファイルそのものではなく、ファイルが保存されている場所(パス)を相手に伝えているようなイメージです

元ファイルが保存されている場所が分かれば、そこへアクセスして書き換えることが可能になります

swap関数が実行していることは、まさに元ファイルを書き換えている作業となります

最後にまとめると

ポインタとは、変数が保存されている場所 です(PC上の作業では、ファイルの保存場所(パス)に相当します)

上記のswap関数では、変数の代わりに、変数が保存されている場所を引数として受け取っています

こうすることで、これらの変数が保存されている場所へアクセスして、これらの変数に格納されている値を書き換えています

コメント

この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
タイトルとURLをコピーしました