2017-04-10 20 views
-1

私はC++のポインタについて学び始めており、以下のコードを使って配列内の要素へのアクセスを練習しています。配列境界外のポインタ

using namespace std; 
char a[] = {'A', 'B'}; 
char* p = a; 

cout << "ARRAY IS " << sizeof(a) << " BYTES." << endl; 
cout << "CHARACTER IS " << sizeof(a[0]) << " BYTES." << endl; 
cout << "THEREFORE LENGTH IS " << (sizeof(a)/sizeof(char)) << " ELEMENTS." << endl << endl; 

cout << "INDEX 0: " << *p << endl; 
p++; 
cout << "INDEX 1: " << *p << endl; 
p++; 
cout << "INDEX ?: " << *p << endl; 
p++; 
cout << "INDEX ??: " << *p << endl; 

return 0; 

私は、配列には2つの要素しかないが、とにかくポインタをインクリメントしてみたことを理解しています。

どうすれば╟文字がコンソールに印刷されますか?

私はIDEとしてVisual Studioを使用しています。

+1

プログラムの動作は未定義です。何も印刷しないか、何も印刷しないか、まったく別の処理を行う可能性があります。 –

+0

範囲外の配列へのアクセスは未定義の動作です。つまり、何かが起こる可能性があります:クラッシュ、ゴミなど – crashmstr

答えて

-1

あなたは、それがpが指し示す場所に格納されているので、その文字を取得することがあります。しかし、次回はプログラムが実行されることは保証されません。

pは、割り当てられた配列のすぐ上のどこかを指します。実際には、pが配列の直後に割り当てられているので、それ自身を指していると思います。

+0

そのdownvoteは速かった。詳しく説明するコメントはどうですか? – donjuedo

+0

私は投票しませんでしたが、あなたの答えは最も重要な部分を逃しています:与えられたコードは未定義の振る舞いをしています。次回の実行では他のゴミを印刷することもできますが、あなたの猫(またはネイバーズの猫)を殺すことも同様です。 –

+0

@DanielJour、私は2番目のセンテンスが頭に釘を打つと信じています。おそらく私はその理由について十分に明確ではなかったでしょう。 – donjuedo

関連する問題