【问题标题】:Scopes and Pointers [duplicate]范围和指针 [重复]
【发布时间】:2016-06-05 02:22:41
【问题描述】:

这是我有疑问的代码:

int* getPtrToFive() {   
   int x = 5;   
   return &x;
}  
int main() {   
   int *p = getPtrToFive();   
   cout << *p << endl; // ??? 
}

演讲幻灯片说 *p 不会给出有效结果,因为当 getPtrToFive 返回时,x 超出范围。但是,我认为 getPtrToFive 已经包含 5 的值,这将验证 *p?是因为指针试图将我引导到超出范围 x 的 getPtrToFive 吗?

【问题讨论】:

    标签: c++ pointers scope


    【解决方案1】:

    您似乎没有理解指针的基本概念。把它想象成房子的地址。 1 Main St 是您的指针。但是,如果房子被毁了怎么办?有人会一路开车到 1 Main St,却发现那里有一堆杂物……肯定不是好结果。

    所以,当函数退出时,房子就被摧毁了。你还有地址,但是什么都没有了。

    【讨论】:

    • 很好的类比例子。
    • 我想我还是不明白,因为这似乎与另一个问题的答案相反。 stackoverflow.com/questions/6441218/… 另一个问题表明,即使有人以完全相同的格式键入代码,他们仍然能够从 cout 获得结果。现在,讲座说你不会得到任何结果,就像你一样。
    • @blueyfooey,两个答案都有相同的想法。 (实际上,您链接的那个比我的要好)。你可以得到一个随机的结果。随机结果就是这样 - 随机的。可能会得到 5,可能会得到 42,可能会出现程序崩溃(随机结果的变体),或其他任何情况。
    【解决方案2】:

    是的,你是对的。

    即使输出以某种方式5,访问超出范围的内存也是非法的。

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2016-11-15
      • 2013-06-17
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      相关资源
      最近更新 更多