当我在此链接上找到代码时,我正在网上阅读有关悬挂指针的信息:
我将它贴在这里:
#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;
}
这是一个悬空指针,哪个指针悬空?代码看起来对我有用。它应该打印&#34; i = 21&#34;并返回。我没有看到任何悬垂的指针。
答案 0 :(得分:4)
该程序中没有悬空指针。
p
已初始化为指向i
。 p
和i
的生命周期完全相同; p
i
与j
同时不存在(离开最近的封闭区块时)。
int*
,函数f
中的i
参数指向p
(它已初始化为参数i
的值,指向j
)。 f
的生命周期仅限于函数i
中块的执行; i
生命在i
的生命周期开始和结束后i = 21
的生命周期结束后开始{/ 1}}。
该程序应打印int main()
。没有悬空指针,没有未定义的行为。 (int main(void)
应为{{1}},但这只是一个小问题。)