初心者必見!C言語のポインタの使い方

はじめまして、クライアント開発のCです。

今回はC言語のポインタの説明と使い方を紹介したいと思います。

ポインタ型とは

メインメモリに格納された変数のアドレスを示す特殊な変数です。
このポインタをうまく使うことで、メモリの消費を抑えることが出来たり、プログラムの処理速度を向上させることができます。

今回はそんなポインタについて初心者の方向けに簡単な使い方をご紹介出来ればと思います。

ポインタ型変数の使い方

では早速ポインタ型変数の使い方について説明していきます。

まずは変数の宣言についてです。
ポインタ型変数を宣言する際はこのように宣言します。

//型名    *変数名;
int    *intptr;

重要なのは変数名の前に*(アスタリスク)をつけることです。

 

次に整数型の変数を用意し、そのアドレスを確認してみましょう。

変数のアドレスは変数名の前に&をつけて表します。

int   i = 2;
printf(“iのアドレス = %08x”, &i);
 
//出力結果
iのアドレス = 0x004ffed0

無事に整数型変数iのアドレスを確認できました。

 

ではこのアドレスを最初に宣言をしたintptrに代入してみます。

注意点としてポインタ変数と代入したい変数の型は一致している必要があります。(今回は共にint型)

intptr = &i;

 

では代入ができているか確認してみましょう。

printf("intptrに保存されている値 = %d", *intptr);
 
//出力結果
intptrに保存されている値 = 2

 

ポインタ型変数のアドレスについても代入されているか確認します。

printf("intptrのアドレス = %08x", intptr);

//出力結果
intptrに保存されている値 = 0x004ffed0

まとめ

整数型変数 i の値は i

整数型変数 i のアドレスは &i

ポイント型変数 intptr の値は *intptr

ポイント型変数 intptr のアドレスは intptr

ポインタと配列

配列の構造は連続するアドレスが使われているので、ポイント型変数を利用して、数値を取り出すことができます。

 

まず初めに、配列numsとポインタ型変数のnumptrを宣言し、配列の先頭アドレスを代入します。

int nums[] = { 1, 2, 3, 4, 5 };

int *numptr;

numptr = nums; //配列の先頭アドレスを代入する

 

この配列の値を普通に表示してみます。

printf("配列の値は[%d], [%d], [%d], [%d], [%d]", 
nums[0], nums[1], nums[2], nums[3], nums[4]);

//出力結果
配列の値は[1], [2], [3], [4], [5]。

 

ではこれをポインタを使い、表示してみます。

printf("配列の値は[%d], [%d], [%d], [%d], [%d]", 
*numptr, *(numptr+1), *(numptr+2), *(numptr+3), *(numptr+4));

//出力結果
配列の値は[1], [2], [3], [4], [5]

 

同じ値が出てきました。

numptr[i]と*(numptr + i)のアドレスは同じなので、返す値も同じというわけですね。

ポインタを利用して動的配列のメモリを割り当てる

では次にポインタを利用して動的配列にメモリを割り当ててみます。

動的配列は配列の長さが初めから決まっておらず、実行時に必要な要素を追加したり、削除したりすることができるものです。

 

メモリを割り当てる際には、演算子 “new” を使います。

int *nums;

int size = 5;//sizeを決めます。

nums = new int[size];

 

これで動的配列にメモリを割り当てることができました。

 

次に割り当てたメモリを開放する方法です。

メインメモリにアドレスを割り当てた後、利用しない場合はメモリを解放する必要があります。

動的なメモリを解放する際は演算子 “delete” を使います。

int *nums;

int size = 5;//sizeを決めます。

nums = new int[size];

delete [] nums;//動的配列のメモリを解放する

 

これで利用していないメモリを解放することができました。

最後に

今回はC言語のポインタについて簡単な紹介をしました。

ポインタを利用することで、配列や構造体をメモリを無駄に消費せずに関数に渡すことができたり、通常1つしか持てない戻り値を複数持てるようになるなど様々なことができます。

なかなか理解するのが難しいポインタですが、諦めず使えるように頑張りましょう。

 


 

ココネでは一緒に働く仲間を募集中です。

ご興味のある方は、ぜひこちらの採用特設サイトをご覧ください。

https://www.cocone.co.jp/recruit/contents/

Category

Tag

%d