*dest
このカスタム文字列コピー関数があり、逆参照して内容を変更すると引数が変化することに気付きました。
char *copyArray(char *dest, char *src)
{
char *a = dest;
while (*dest++ = *src++)
;
char *b = dest;
if ( (a-b) != 0)
printf("Dest pointer has changed\n");
return dest;
}
そして、次のコードを検討すると:
int main()
{
char name [] = "Hello, there!";
char *new = copyArray(name, "bye");
printf("New is '%s', name is '%s'\n", new, name);
return 0;
}
次の出力が得られます。
Dest pointer has changed
New is 'o, there!', name is 'bye'
なぜこれが起こるのですか?
私の意図は*new
、同じ場所をname[]
指すことでしたが、明らかにアドレスが変更されたため、別の場所を指しています。
何が起こったのか、コピーが終了すると、Cは宛先文字列の元の内容から変更された文字数(「さようなら」の場合は4)を引いたものを新しいアドレスに移動し、それをに割り当てたように感じ*dest
ます。
これは本当に起こっていることですか?そして、誰かが私に理由を説明してもらえますか?
これは実際には仕事とは関係ありません。ポインターの動作をよりよく理解しようとしているだけです。
返信ありがとうございます。