当我在这个链接上找到代码时,我正在网上阅读有关悬挂指针的内容:
我把它贴在这里:
#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”并返回。我没有看到任何悬挂指针。
最佳答案
该程序中没有悬挂指针。
p
被初始化为指向 i
。 p
和 i
的生命周期完全相同; p
在 i
存在的同时停止存在(在离开最近的封闭 block 时)。
j
,函数f
中的int*
参数,指向i
(初始化为参数 p
的值,它指向 i
)。 j
的生命周期仅限于函数 f
中 block 的执行; i
在 i
的生命周期开始后开始,在 i
的生命周期结束之前结束。
程序应该打印i = 21
。没有悬挂指针,没有未定义的行为。 (int main()
应该是 int main(void)
,但这是次要的一点。)
关于c - 这怎么是悬空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29402070/