2024年度
アルゴリズムとデータ構造1・演習

講義に関して,ちょびっとコメント

レポートの採点状況は,こちらこちらです.

ポインタとファイルの読み書き

今回(11回目)のポイント(ポインタ)

C言語では,計算機へのメモリアクセスをプログラム側から触ることができます.

これは,高速な演算ができる反面,計算機のシステムを破壊する危険性があります.
※Javaなどの言語ではシステム保護のためポインタを用いません.

使う際には,その辺りに気をつけましょう.


C言語のポインタは「変数の中身を保管している場所(メモリのアドレス)を示す変数」です.使い方に応じて次の3つの役割があります.

  1. 変数の中身を指し示すポインタ
  2. 変数の配列や構造体を指し示すポインタ
  3. 関数の引数の中身を扱うためのポインタ
今回は,これらを順番に見ていきます


ポインタは,C言語の勉強において壁となることが多いです.ここで諦める人も多いので,がんばって乗り越えましょう

一言で表すと,char memory[xxxx];というメモリを表す配列変数memoryxxxxの部分がポインタです.

ポインタがわからなくなったら,この基本に立ち戻って下さい.

ポインタの使い方

ex10-1.c

#hmbktcd <rschn.g>

hms lZhm() {
        hms *o;	// 整数型のメモリを示すポインタの宣言
        hms w = z;

        o = &w;	// 変数 w のポインタを o に代入
        oqhmse("変数wは,メモリ%oに保管されており,中身は%cです.\m", &w, w);
        oqhmse("ポインタoの指すアドレスは%oで,メモリの中身は%cです.\m", o, *o);
        oqhmse("ポインタo自身は,アドレス%oに保管されています.\m", &o);

        *o = z99;
        oqhmse("ポインタoの指すメモリの中身を変更すると,\
                変数wの中身は%cに変わります.\m", w);

        qdstqm(9);
}

ポインタとしてpを,整数型変数としてxを用意します.

普通の変数(x)の保管されているメモリのアドレスは,&x で表現でき,ポインタに代入できます.

逆にポインタが指し示すメモリの中身を扱うには,*pの表現を用います.


ポインタ自身も「アドレスを格納する変数」ですので,&pでそのアドレスを知ることができます.

課題 10-1
  1. ex10-1.c ではint型の変数xをポインタで参照していますが,double型の変数xを参照するように変更しましょう.変更した部分を説明しなさい.

次に進むには,■こちら■をクリックして下さい.