无法理解让我们来C静态存储类的例子

我无法理解Yashwant Kanetkar的“让我们C”中的一个例子。 这是代码片段:

main() { int *j; int *fun(); j = fun(); // If we add a function call here, the print statement prints a garbage value. printf("\n%d",*j); } int *fun() { int k = 35; return (&k); } 

现在在上面的代码中,我无法理解为什么在printf语句导致打印垃圾值之前调用函数。 我有一个模糊的想法,因为返回的值指向堆栈中的内存位置,在打印此值之前调用另一个函数时会出现问题。 但我无法清楚地看到这里发生的事情。 请帮忙。

在你的代码中

 int *fun() { int k = 35; return (&k); } 

你从fun()返回一个局部变量的地址。 任何返回值的使用都会导致未定义的行为 。

为了解释,一旦函数fun()完成执行,就不存在k 。 因此,尝试使用像&k这样的东西是无效的。

注意:无论在特定书籍[与堆栈刷新等有关]中提供的解释是什么,都没有在c中标准化。

 int k = 35; 

函数fun()是本地的,所以一旦你从fun()返回,为k分配的内存不再有效,你返回&k (该变量的地址)将导致未定义的行为