興味深い問題があります。ポインターを返す読み取り関数があります。
char * myReadFunc() {
char r [10];
//some code that reads data into r.
return r;
}
ここで、この関数を呼び出して、私が持っているいくつかの変数に情報を割り当てます。
char * s;
//Some code to specify where to read from.
s = myReadFunc();
これにより、意図したとおりの結果が得られます。
ただし、これを行うと:
char * s1;
char * s2;
//Some code to specify where to read from.
s1 = myReadFunc();
//Some code to change the read location.
s2 = myReadFunc();
奇妙な結果が得られます。データは両方とも同じで、常に 2 番目に指定された読み取り場所からのものです。
だから私はいくつかの代替コードを試しました:
char * s1;
char * s2;
//Some code to specify where to read from.
char r [10];
//some code that reads data into r. IDENTICAL to myReadFunc().
s1 = r;
//Some code to change the read location.
s2 = myReadFunc();
このコードは、意図したとおりの結果を生成します (s1
ある場所からのデータがありs2
、別の場所からのデータがあります)。
では、私の質問は、なぜ後者のコードが機能したのに、その上のコードが機能しなかったのかということです。私の推測では、どういうわけか私の関数は両方の変数にエイリアスされていて、両方を指していたので、呼び出されるたびに両方を再割り当てしたと思います。この動作の完全な理由を理解している人はいますか?