ポインタの使い方

 C言語のポインタについて説明する上で、初心者が挫折しやすい傾向があるため、身近な例を用いるなどして解説を続けてきました。ただ、プログラムが全くなく、そろそろ飽きてきた頃かと思いますので、今回はポインタを使った簡単なプログラムを作っていきましょう。

 以下のプログラムを作成し、実行してみて下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    
    // 変数の定義
    int var;
    
    // ポインタの定義
    int *pointer;
    
    // ポインタの示す場所を指定
    pointer = &var;
    
    // ポインタの示す場所(変数)に値を入れる
    *pointer = 123;
    
    // ポインタのアドレスと、そのアドレス先に格納された値を表示
    printf("ポインタpointerのアドレス:%p\n", pointer);
    printf("ポインタpointerの中身:%d\n", *pointer);
    
    // 変数varのアドレスと中身を表示
    printf("変数varのアドレス:%p\n", &var);
    printf("変数varの中身:%d\n", var);
    
    // 変数varの値を変更し、表示結果を確認する
    var = 456;
    printf("ポインタpointerのアドレス:%p\n", pointer);
    printf("ポインタpointerのアドレスの場所に格納された値:%d\n", *pointer);
    printf("変数varのアドレス:%p\n", &var);
    printf("変数varの中身:%d\n", var);
    
    return 0;
}

 お使いの環境などによってアドレスの値は変化しますが、おおむね、以下のような表示が出ます。

ポインタpointerのアドレス:0x7fff5fbff84c
ポインタpointerのアドレスの場所に格納された値:123
変数varのアドレス:0x7fff5fbff84c
変数varの中身:123

ポインタpointerのアドレス:0x7fff5fbff84c
ポインタpointerのアドレスの場所に格納された値:456
変数varのアドレス:0x7fff5fbff84c
変数varの中身:456

 ひとつずつ見ていきましょう。まず、「int *pointer;」というように、pointerという名前のポインタを使うことを宣言します。変数の定義とほぼ同じですが、名前の前に「*」をつけるとポインタになります。

 その後、自動販売機のボタンがどのジュースの入れ口を見るかを決めるのと同じように、ポインタであるpointerに、その中身となるアドレスを入れる(割り当てる)のですが、先の記事でも書いたようにアドレスはコンピュータが自動で決めるので、自分で何らかのアドレスの値を入れることは出来ません。そのため、先にvarという変数を作り、その変数varが置かれている場所(設定されているアドレス)を取得してpointerに入れます。ある変数(この場合はvar)の場所を示すアドレスを取得するには「&var」のように「&」を変数名の頭につけます。

 ポインタにアドレスを設定してしまえば、「*pointer = 123;」のように、ポインタが示すアドレスの中の値を出し入れすることが可能になります。「ポインタが示すアドレスの中身」を操作する場合は、「*pointer」のようにポインタ名に「*」をつけます。「*」は「ポインタの宣言」と「ポインタが示すアドレスの中身」という2つの意味で使われることに注意して下さい。ちなみに、ポインタpointerが見ている場所には変数varがあるわけですから、「*pointer = 123;」は、「var = 123;」と書いたのと同じです。後半4行の表示は、そのことを確認するためのものです。この8行の出力内容をよく確認してみて下さい。尚、printf関数でアドレスを表示したい際は「%p」を指定します。

 最初のうちは「*」だ「&」だと新しい記号が出てきたりして混乱するかもしれません。ゆっくりで構わないので、色々と試してみて理解していって下さい。

■スポンサーリンク

このページの先頭へ