質問: "changed"; } ``` このようなstringを参照として渡す関数を用意し、値を変更した場合 書き換える前と後とでポインターアドレスが違います。 この、ポインタを参照するポインタに新しいアドレスを設定したいのです。 正確なことは分かりませんが、私の推測ではC#のstring型には * 文字列の長さ情報を格納するアドレスを示すポインタ * 文字列の値情報を格納するアドレスを示すポインタ が有り、AddrOfPinnedObjectが返すポインタは後者の * 文字列の値情報を格納するアドレスを示すポインタ であると推測します。 そこで、文字列の値情報を格納するアドレスを示すポインタのポインタを取得し、 強引にポインタ自体を置き換える方法を探しています。 以上、よろしくお願いします。
回答: .NET Frameworkの文字列型は連続したメモリ上で下記のようなフォーマットで記録されています。 * 文字列長 (4バイト整数) * `char`配列 (2バイト×文字数) * NULL文字 (2バイト) そして`string`のポインタは先頭の`char`を指しています。ですので元の文字数の範囲内で`((char*)ptr)[i]`に値を代入することで既存のインスタンスの表す値を書き換えることは可能ですが、ポインタへのポインタといったものは存在しないため再アロケーションが必要になる操作を行うことはできません。