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,指针也发生了变化。

另一件事是,在运行结束时 Temp 是“世界”,现在怎么可能?方式是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

您的问题的答案分为两部分:1)您已经声明了指向“const”的指针,而不是“const”指针(我猜是您想要的)。2) 为 "Hello" 和 "World" 分配的内存不在函数 func_journey 本地堆栈中,而是在全局只读内存位置中(查看如何分配字符串文字)。如果您使用 char 数组声明,则不会将“World”复制回 Temp。

于 2013-06-18T19:23:47.020 回答