0

次のコードがあります。

const char * func_journey ()
{
    const char * manner = "Hello";

    manner = "World";

    return manner;

 }

 int main()
 {

     const char * Temp;

     Temp = func_journey();

     return 0;
 }

何が起こるかを確認するためだけにデバッグで実行しましたが、何らかの方法で「Hello」から「World」に変更され、const と宣言したためにポインターも変更されました。

もう 1 つのことは、実行の最後に Temp が "World" だったということです。func_journey 内の自動変数だったのですが、最後に破棄されるべきではありませんか?

どうもありがとう。

4

2 に答える 2

6

何が起こるかを確認するためにデバッグで実行しましたが、どういうわけか「Hello」から「World」に変更されました

それはまさにあなたのコードがそうするように指示したことなので、あなたが要求したことを実行したとしても驚くことではありません。

また、ポインターを宣言したためにポインターが変更されましたconst

constポインターではなく、へのポインターとして宣言しましたconst(これは紛らわしいかもしれません)。と書くconst char *と、それは指しているものが であることを意味しconstます。ポインター自体が であると言いたい場合はconst

char * const manner = "Hello";
于 2013-06-18T19:07:25.683 に答える
1

あなたの質問への答えは2つの部分です:1)「const」ポインターではなく「const」へのポインターを宣言しました(あなたが望んでいたと思います)。2) "Hello" と "World" の両方に割り当てられたメモリは、関数 func_journey のローカル スタックではなく、グローバルな読み取り専用メモリの場所にあります (文字列リテラルがどのように割り当てられているかを調べてください)。char 配列を使用して宣言すると、「World」は Temp にコピーされません。

于 2013-06-18T19:23:47.020 に答える