范围和指针

Scopes and Pointers

本文关键字:指针 范围      更新时间:2023-10-16

这是我有疑问的代码:

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

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

您似乎无法理解指针的基本概念。把它想象成房子的地址。1 Main St 是您的指针。但是,如果房子被摧毁,会发生什么?有人会一路开车到主街1号,却发现那里有一堆碎片......当然不是一个好的结果。

因此,当函数退出时,房子就会被摧毁。你还有地址,但那里什么都没有了。

是的,你是对的。

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