这怎么是悬空指针?
How is this a dangling pointer?
我在网上阅读有关悬挂指针的内容时发现了此 link 上的代码:
我把它贴在这里:
#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
被初始化为指向 i
。 p
和 i
的生命周期完全相同; p
在 i
存在的同时停止存在(在离开最近的封闭块时)。
j
,函数f
中的int*
参数,指向i
(初始化为参数p
的值,即指向 i
)。 j
的生命周期仅限于函数f
中block的执行; i
在 i
的生命周期开始后开始,在 i
的生命周期结束之前结束。
程序应该打印 i = 21
。没有悬挂指针,没有未定义的行为。 (int main()
应该是 int main(void)
,但这是一个小问题。)
我在网上阅读有关悬挂指针的内容时发现了此 link 上的代码:
我把它贴在这里:
#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
被初始化为指向 i
。 p
和 i
的生命周期完全相同; p
在 i
存在的同时停止存在(在离开最近的封闭块时)。
j
,函数f
中的int*
参数,指向i
(初始化为参数p
的值,即指向 i
)。 j
的生命周期仅限于函数f
中block的执行; i
在 i
的生命周期开始后开始,在 i
的生命周期结束之前结束。
程序应该打印 i = 21
。没有悬挂指针,没有未定义的行为。 (int main()
应该是 int main(void)
,但这是一个小问题。)