c++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
TRANSCRIPT
![Page 1: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/1.jpg)
C/C++と仲良しになるための n問@cocodrips
![Page 2: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/2.jpg)
自己紹介名前 : くーむ ( o ・ ω ・ ) ノTwitter : @cocodrips職業 : ゲームプログラマ (2年目 )すきなもの : Python / C++ブログ : ぴよぴよ.pyC++ 歴 : 2500 行くらい ( 初心者 )
![Page 3: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/3.jpg)
ポインタとは‣ 変数を指す変数
✦ 変数はメモリ上のどこかに配置される✦ 配置される場所のことをアドレスと言う
![Page 4: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/4.jpg)
Q1. ポインタの基本
x ptr
100( アドレス ) 116
int x = 10;int *ptr = &x;
x ptr &x &ptr *ptr
Q1. それそれの値は何になる??
![Page 5: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/5.jpg)
x ptr
100( アドレス )
int x = 10;int *ptr = &x;
x ptr &x &ptr *ptr
10
Q1. それそれの値は何になる??
Q1. ポインタの基本
116
![Page 6: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/6.jpg)
x ptr
100( アドレス )
int x = 10;int *ptr = &x;
x ptr &x &ptr *ptr
10 100
Q1. それそれの値は何になる??
Q1. ポインタの基本
116
![Page 7: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/20.jpg)
Q4. おまけint array[5] = {4, 3, 10, 2, 1};
Q4. 何が表示される?cout << 2[array] << endl;
![Page 21: C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062400/589b0f561a28abb85d8b6bdf/html5/thumbnails/22.jpg)
これまでのお話が書いてある本
秘伝 C 言語問答 ポインタ編柴田望洋さん一冊まるごとポインタの話。ポインタが怖い人への本