Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
CLR/H No.35-2
CLR/H No.35-2
Loading in …3
×

Check these out next

1 of 22 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (20)

Advertisement

Similar to C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp (20)

Advertisement

Recently uploaded (20)

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

  1. 1. C/C++と 仲良しになるためのn問 @cocodrips 1
  2. 2. 自己紹介 2 名前 : くーむ ( o・ω・)ノ Twitter : @cocodrips 職業 : ゲームプログラマ(2年目) すきなもの : Python / C++ ブログ : ぴよぴよ.py C++歴 : 2500行くらい (初心者)
  3. 3. ポインタとは 3 ‣ 変数を指す変数 ✦ 変数はメモリ上のどこかに配置される ✦ 配置される場所のことをアドレスと言う
  4. 4. Q1.ポインタの基本 5 x ptr 100(アドレス) 116 int x = 10; int *ptr = &x; x ptr &x &ptr *ptr Q1. それそれの値は何になる??
  5. 5. 6 x ptr 100(アドレス) int x = 10; int *ptr = &x; x ptr &x &ptr *ptr 10 Q1. それそれの値は何になる?? Q1.ポインタの基本 116
  6. 6. 7 x ptr 100(アドレス) int x = 10; int *ptr = &x; x ptr &x &ptr *ptr 10 100 Q1. それそれの値は何になる?? Q1.ポインタの基本 116
  7. 7. 8 x ptr 100(アドレス) int x = 10; int *ptr = &x; x ptr &x &ptr *ptr 10 100 100 Q1. それそれの値は何になる?? Q1.ポインタの基本 116
  8. 8. 9 x ptr 100(アドレス) int x = 10; int *ptr = &x; x ptr &x &ptr *ptr 10 100 100 116 Q1. それそれの値は何になる?? Q1.ポインタの基本 116
  9. 9. 10 x ptr 100(アドレス) int x = 10; int *ptr = &x; x ptr &x &ptr *ptr 10 100 100 116 10 Q1. それそれの値は何になる?? Q1.ポインタの基本 116
  10. 10. 11 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. 100 3. 4
  11. 11. 12 4 3 10 2 1 100(アドレス) 108 Q2.ポインタと配列 int array[5] = {4, 3, 10, 2, 1}; 104 112 116 *array は、 array[0] のエイリアス 1. コンパイルエラー 2. 100 3. 4 Q2 - 1. *array をcoutするとどうなる?
  12. 12. 13 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. 3 4. 1
  13. 13. 14 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. 3 4. 1 array + 4 は array[4]のアドレス *(array + 4) は array[4] のエイリアス
  14. 14. 15 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(アドレス)
  15. 15. 16 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(アドレス)
  16. 16. 17 Q3.ポインタと多次元配列 int array[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; 0 1 2 3 4 5 6 7 8 100(アドレス) 104 108 112 116 120 124 128 132 Q3 -2. array[2] をcoutすると、何が表示される? 1. コンパイルエラー 2. 108 3. 124 4. 2 5. 6
  17. 17. 18 Q3.ポインタと多次元配列 int array[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; 0 1 2 3 4 5 6 7 8 100(アドレス) 104 108 112 116 120 124 128 132 array[2]が指しているのは、 array[2][0]のアドレス。 Q3 -2. array[2] をcoutすると、何が表示される? 1. コンパイルエラー 2. 108 3. 124 4. 2 5. 6
  18. 18. 19 Q3 - 3. array[1][2]に一次元でアクセスしたい時、 どうすれば5が表示される? Q3.ポインタと多次元配列 int array[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
  19. 19. 20 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が表示される?
  20. 20. 21 Q4. おまけ int array[5] = {4, 3, 10, 2, 1}; Q4. 何が表示される? cout << 2[array] << endl;
  21. 21. 22 Q4. おまけ int array[5] = {4, 3, 10, 2, 1}; Q4. 何が表示される? cout << 2[array] << endl; 10 array[2]は *(array + 2)のエイリアス。 array[2] == *(array + 2) *(array + 2) == *(2 + array) *(2 + array) == 2[array]
  22. 22. これまでのお話が書いてある本 23 秘伝C言語問答 ポインタ編 柴田望洋さん 一冊まるごとポインタの話。 ポインタが怖い人への本

Editor's Notes

  • 配列はこうやって連続的なアドレスに配置される

×