c++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

22
C/C++ と ととととととととと n と @cocodrips

Upload: cocodrips

Post on 08-Feb-2017

1.106 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

C/C++と仲良しになるための n問@cocodrips

Page 2: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

自己紹介名前 : くーむ ( o ・ ω ・ ) ノTwitter : @cocodrips職業 : ゲームプログラマ (2年目 )すきなもの : Python / C++ブログ : ぴよぴよ.pyC++ 歴 : 2500 行くらい ( 初心者 )

Page 3: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

ポインタとは‣ 変数を指す変数

✦ 変数はメモリ上のどこかに配置される✦ 配置される場所のことをアドレスと言う

Page 4: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

Q1. ポインタの基本

x ptr

100( アドレス ) 116

int x = 10;int *ptr = &x;

x ptr &x &ptr *ptr

Q1. それそれの値は何になる??

Page 5: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

x ptr

100( アドレス )

int x = 10;int *ptr = &x;

x ptr &x &ptr *ptr

10

Q1. それそれの値は何になる??

Q1. ポインタの基本

116

Page 6: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

x ptr

100( アドレス )

int x = 10;int *ptr = &x;

x ptr &x &ptr *ptr

10 100

Q1. それそれの値は何になる??

Q1. ポインタの基本

116

Page 7: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

x ptr

100( アドレス )

int x = 10;int *ptr = &x;

x ptr &x &ptr *ptr

10 100 100

Q1. それそれの値は何になる??

Q1. ポインタの基本

116

Page 8: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

x ptr

100( アドレス )

int x = 10;int *ptr = &x;

x ptr &x &ptr *ptr

10 100 100 116

Q1. それそれの値は何になる??

Q1. ポインタの基本

116

Page 9: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

x ptr

100( アドレス )

int x = 10;int *ptr = &x;

x ptr &x &ptr *ptr

10 100 100 116 10

Q1. それそれの値は何になる??

Q1. ポインタの基本

116

Page 10: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

4 3 10 2 1

100( アドレス ) 108

Q2 - 1. *array を cout するとどうなる?

Q2. ポインタと配列int array[5] = {4, 3, 10, 2, 1};

104 112 116

1. コンパイルエラー 2. 1003. 4

Page 11: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

4 3 10 2 1

100( アドレス ) 108

Q2. ポインタと配列int array[5] = {4, 3, 10, 2, 1};

104 112 116

*array は、 array[0] のエイリアス1. コンパイルエラー

2. 1003. 4

Q2 - 1. *array を cout するとどうなる?

Page 12: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

4 3 10 2 1

100( アドレス ) 108

Q2 - 2. *(array + 4) を cout するとどうなる?

Q2. ポインタと配列int array[5] = {4, 3, 10, 2, 1};

104 112 116

1. コンパイルエラー2. 104 3. 34. 1

Page 13: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

4 3 10 2 1

100( アドレス ) 108

Q2 - 2. *(array + 4) を cout するとどうなる?

Q2. ポインタと配列int array[5] = {4, 3, 10, 2, 1};

104 112 116

1. コンパイルエラー2. 104 3. 34. 1

array + 4 は array[4] のアドレス*(array + 4) は

array[4] のエイリアス

Page 14: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

Q3 - 1. &array が 100 である時、 array の中身はどう配置されてる?

Q3. ポインタと多次元配列 int array[3][3] = {{0, 1, 2}, {3, 4, 5},

{6, 7, 8}};

0 1 2 3 4 5 6 7 81.

0 1 2 … … 3 4 5 … … 6 7 82.100( アドレス )

100( アドレス )

Page 15: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

Q3 - 1. &array が 100 である時、 array の中身はどう配置されてる?

Q3. ポインタと多次元配列 int array[3][3] = {{0, 1, 2}, {3, 4, 5},

{6, 7, 8}};

0 1 2 3 4 5 6 7 81.

0 1 2 … … 3 4 5 … … 6 7 82.100( アドレス )

100( アドレス )

Page 16: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

Q3. ポインタと多次元配列 int array[3][3] = {{0, 1, 2}, {3, 4, 5},

{6, 7, 8}};

0 1 2 3 4 5 6 7 8100( アドレス ) 104 108 112 116 120 124 128 132

Q3 -2. array[2] を cout すると、何が表示される?1. コンパイルエラー2. 1083. 124

4. 25. 6

Page 17: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

Q3. ポインタと多次元配列 int array[3][3] = {{0, 1, 2}, {3, 4, 5},

{6, 7, 8}};

0 1 2 3 4 5 6 7 8100( アドレス ) 104 108 112 116 120 124 128 132

array[2] が指しているのは、 array[2][0] のアドレス。

Q3 -2. array[2] を cout すると、何が表示される?1. コンパイルエラー2. 1083. 124

4. 25. 6

Page 18: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

Q3 - 3. array[1][2] に一次元でアクセスしたい時、どうすれば 5 が表示される?

Q3. ポインタと多次元配列 int array[3][3] = {{0, 1, 2}, {3, 4, 5},

{6, 7, 8}};

Page 19: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

Q3. ポインタと多次元配列 int array[3][3] = {{0, 1, 2}, {3, 4, 5},

{6, 7, 8}};

((int*)array)[5];array は int** 型で、 array[0] の先頭アドレス、つまり array[0][0] のアドレスを持っている。int* 型にキャストすれば、一次元でアクセス可能

Q3 - 3. array[1][2] に一次元でアクセスしたい時、どうすれば 5 が表示される?

Page 20: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

Q4. おまけint array[5] = {4, 3, 10, 2, 1};

Q4. 何が表示される?cout << 2[array] << endl;

Page 21: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

Q4. おまけint array[5] = {4, 3, 10, 2, 1};

Q4. 何が表示される?cout << 2[array] << endl;

10array[2] は *(array + 2) のエイリアス。 array[2] == *(array + 2) *(array + 2) == *(2 + array) *(2 + array) == 2[array]

Page 22: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp

これまでのお話が書いてある本

秘伝 C 言語問答 ポインタ編柴田望洋さん一冊まるごとポインタの話。ポインタが怖い人への本