この記事 ( http://www.codeproject.com/Articles/627/A-Beginner-s-Guide-to-Pointers ) を読んでいました。この記事には、それらを使用する理由の 1 つを説明するコードが含まれています。例えば。ダイナミック アロケーション。
例1。間違ったプログラム:
「このプログラムは、まず SomeFunction 関数を呼び出します。この関数は、nNumber という変数を作成し、pPointer がそれを指すようにします。しかし、問題はそこにあります。関数が終了すると、nNumber はローカル変数であるため削除されます。ローカル変数は、実行が定義されたブロックを離れると常に削除されます. これは、SomeFunction が main() に戻ると、変数が削除されることを意味します. したがって、pPointer は、変数が以前にあった場所を指していますが、これはもはやこのプログラムには属していません. "
#include <stdio.h>
int *pPointer;
void SomeFunction()
{
int nNumber;
nNumber = 25;
// make pPointer point to nNumber:
pPointer = &nNumber;
}
void main()
{
SomeFunction(); // make pPointer point to something
// why does this fail?
printf("Value of *pPointer: %d\n", *pPointer);
}
例2。正しいプログラム:
「SomeFunction が呼び出されると、いくつかのメモリが割り当てられ、pPointer がそれを指すようになります。今回、関数が戻ると、新しいメモリはそのまま残されるため、pPointer はまだ何か有用なものを指しています。動的割り当てはこれで終わりです!」
#include <stdio.h>
int *pPointer;
void SomeFunction()
{
// make pPointer point to a new integer
pPointer = new int;
*pPointer = 25;
}
void main()
{
SomeFunction(); // make pPointer point to something
printf("Value of *pPointer: %d\n", *pPointer);
}
私の質問:
上記の説明は私にとって完全に理にかなっていて、ポインターを使用する理由については気分が良かった. 次に、プログラムを実行して何が起こるかを確認することにしました。25 が削除されたため、最初の 1 つに *pPointer の乱数が表示されることを期待していました。両方のプログラムで、「Value of *pPointer: 25」が正しく表示されました。チュートリアルが言ったように、最初のプログラムは失敗するべきではありませんでしたか?