这怎么是悬空指针?

How is this a dangling pointer?

我在网上阅读有关悬挂指针的内容时发现了此 link 上的代码:

http://www.billioncodes.com/c/ques-and-ans/747-what-is-dangling-pointer-give-an-example-on-pointers-to-pointer-and-passing-by-address

我把它贴在这里:

#include <stdio.h>
void f(int *j)
{
    (*j)++;
}
int main()
{
    int i = 20;
    int *p = &i;
    f(p);
    printf("i = %d\n", i);
    return 0;
}

这怎么是悬空指针,悬空指针是哪个?该代码对我来说看起来有效。它应该打印 "i = 21" 和 return。我没有看到任何悬挂指针。

该程序中没有悬挂指针。

p 被初始化为指向 ipi 的生命周期完全相同; pi 存在的同时停止存在(在离开最近的封闭块时)。

j,函数f中的int*参数,指向i(初始化为参数p的值,即指向 i)。 j的生命周期仅限于函数f中block的执行; ii 的生命周期开始后开始,在 i 的生命周期结束之前结束。

程序应该打印 i = 21。没有悬挂指针,没有未定义的行为。 (int main() 应该是 int main(void),但这是一个小问题。)