22
IT入門 B1 C言語 (2007),木曜クラス 第 10 回:6 28 slide-1 IT入門B1C言語 第10回 -ポインタ- 2007 6 28

第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-1

IT入門B1C言語

第10回

-ポインタ-

2007年 6月 28日

Page 2: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-2

データを得るには,まずメモリ上のアドレスが必要,また正しく解釈するためにはその型が識別されなければならない.

1. 定数ポインタ:配列や関数の名前,アドレス演算子&により生成.値は変更不可.例)double x ⇒ &x

8&x = 0xffff(代入不可)2. ポインタ宣言された変数:アドレスを扱う変数

Page 3: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-2

データを得るには,まずメモリ上のアドレスが必要,また正しく解釈するためにはその型が識別されなければならない.

1. 定数ポインタ:配列や関数の名前,アドレス演算子&により生成.値は変更不可.

例)double x ⇒ &x8&x = 0xffff(代入不可)

2. ポインタ宣言された変数:アドレスを扱う変数

Page 4: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-2

データを得るには,まずメモリ上のアドレスが必要,また正しく解釈するためにはその型が識別されなければならない.

1. 定数ポインタ:配列や関数の名前,アドレス演算子&により生成.値は変更不可.例)double x

⇒ &x8&x = 0xffff(代入不可)

2. ポインタ宣言された変数:アドレスを扱う変数

Page 5: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-2

データを得るには,まずメモリ上のアドレスが必要,また正しく解釈するためにはその型が識別されなければならない.

1. 定数ポインタ:配列や関数の名前,アドレス演算子&により生成.値は変更不可.例)double x ⇒ &x

8&x = 0xffff(代入不可)2. ポインタ宣言された変数:アドレスを扱う変数

Page 6: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-2

データを得るには,まずメモリ上のアドレスが必要,また正しく解釈するためにはその型が識別されなければならない.

1. 定数ポインタ:配列や関数の名前,アドレス演算子&により生成.値は変更不可.例)double x ⇒ &x

8&x = 0xffff(代入不可)

2. ポインタ宣言された変数:アドレスを扱う変数

Page 7: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-2

データを得るには,まずメモリ上のアドレスが必要,また正しく解釈するためにはその型が識別されなければならない.

1. 定数ポインタ:配列や関数の名前,アドレス演算子&により生成.値は変更不可.例)double x ⇒ &x

8&x = 0xffff(代入不可)2. ポインタ宣言された変数:アドレスを扱う変数

Page 8: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ変数

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-3

変数へのポインタとしてアスタリスクを前置して宣言する.

double *px, *pz;

double へのポインタ px,pz と呼ぶ.アドレス値を代入することが目的.

間接演算子*:ポインタ px がさす先の変数や関数(の値)を参照する.例) px = &x ⇒ *px=*(&x) ≡ x

Page 9: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ変数

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-3

変数へのポインタとしてアスタリスクを前置して宣言する.

double *px, *pz;

double へのポインタ px,pz と呼ぶ.アドレス値を代入することが目的.

間接演算子*:ポインタ px がさす先の変数や関数(の値)を参照する.例) px = &x ⇒ *px=*(&x) ≡ x

Page 10: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

アドレス値渡し

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-4

pxに xのアドレスが複写されるつまり px =&x

つまり*px(≡x)を読み書きする処理

関数に変数へのポインタが渡ると,元の変数のアドレスを伝えたことになり,関数の中で元の変数の読み書きができる.

呼び出し側:...double x;......ret = func(&x);...

doublefunc(double* px){

...*pxを読み書きする処理...return 式 R;

}

Page 11: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

アドレス値渡し

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-4

pxに xのアドレスが複写されるつまり px =&x

つまり*px(≡x)を読み書きする処理

関数に変数へのポインタが渡ると,元の変数のアドレスを伝えたことになり,関数の中で元の変数の読み書きができる.

呼び出し側:...double x;......ret = func(&x);...

doublefunc(double* px){

...*pxを読み書きする処理...return 式 R;

}

Page 12: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

アドレス値渡し

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-4

pxに xのアドレスが複写されるつまり px =&x

つまり*px(≡x)を読み書きする処理

関数に変数へのポインタが渡ると,元の変数のアドレスを伝えたことになり,関数の中で元の変数の読み書きができる.

呼び出し側:...double x;......ret = func(&x);...

doublefunc(double* px){

...*pxを読み書きする処理...return 式 R;

}

Page 13: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ変数の初期化

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-5

ポインタ変数の値そのものは意味のある値ではなく,ポインタがさす変数に意味(型)がある.まずは,ポイント先の実体を確保する必要がある.

8 double *px; *px = 0.1;8 double *px = 0.1;◎ double rx; double *px;

px = ℞ *px = 0.1;○ double rx; double *px = ℞

Page 14: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ変数の初期化

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-5

ポインタ変数の値そのものは意味のある値ではなく,ポインタがさす変数に意味(型)がある.まずは,ポイント先の実体を確保する必要がある.

8 double *px; *px = 0.1;

8 double *px = 0.1;◎ double rx; double *px;

px = ℞ *px = 0.1;○ double rx; double *px = ℞

Page 15: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ変数の初期化

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-5

ポインタ変数の値そのものは意味のある値ではなく,ポインタがさす変数に意味(型)がある.まずは,ポイント先の実体を確保する必要がある.

8 double *px; *px = 0.1;8 double *px = 0.1;

◎ double rx; double *px;px = ℞ *px = 0.1;

○ double rx; double *px = ℞

Page 16: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ変数の初期化

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-5

ポインタ変数の値そのものは意味のある値ではなく,ポインタがさす変数に意味(型)がある.まずは,ポイント先の実体を確保する必要がある.

8 double *px; *px = 0.1;8 double *px = 0.1;◎ double rx; double *px;

px = ℞ *px = 0.1;○ double rx; double *px = ℞

Page 17: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ変数の初期化

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-5

ポインタ変数の値そのものは意味のある値ではなく,ポインタがさす変数に意味(型)がある.まずは,ポイント先の実体を確保する必要がある.

8 double *px; *px = 0.1;8 double *px = 0.1;◎ double rx; double *px;

px = ℞ *px = 0.1;

○ double rx; double *px = ℞

Page 18: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタ変数の初期化

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-5

ポインタ変数の値そのものは意味のある値ではなく,ポインタがさす変数に意味(型)がある.まずは,ポイント先の実体を確保する必要がある.

8 double *px; *px = 0.1;8 double *px = 0.1;◎ double rx; double *px;

px = ℞ *px = 0.1;○ double rx; double *px = ℞

Page 19: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタを引数とする関数

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-6

関数への引数(変数)に値を保存する(書き込む)目的があるもの.

l scanf()関数l 文字列(配列)を扱う関数l その他

time()関数 ⇐ man 2 time

Page 20: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタを引数とする関数

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-6

関数への引数(変数)に値を保存する(書き込む)目的があるもの.

l scanf()関数

l 文字列(配列)を扱う関数l その他

time()関数 ⇐ man 2 time

Page 21: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタを引数とする関数

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-6

関数への引数(変数)に値を保存する(書き込む)目的があるもの.

l scanf()関数l 文字列(配列)を扱う関数

l その他

time()関数 ⇐ man 2 time

Page 22: 第10回 -ポインタ- · 2007-07-07 · ポインタ vポインタ vポインタ変数 vアドレス値渡し vポインタ変数の初 期化 vポインタを引数と する関数

ポインタを引数とする関数

vポインタ

vポインタ変数

vアドレス値渡し

vポインタ変数の初期化

vポインタを引数とする関数

IT入門B1 C言語 (2007),木曜クラス 第 10 回:6 月 28 日 slide-6

関数への引数(変数)に値を保存する(書き込む)目的があるもの.

l scanf()関数l 文字列(配列)を扱う関数l その他

time()関数 ⇐ man 2 time