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