C问题:传递函数堆栈中定义的var

时间:2011-01-21 15:05:13

标签: c

int myfunc2(struct MyStruct st2[])
{ 

   return 0;

}

int myfunc() 
{
   struct MyStruct st;
   myfunc2(&st);
   return 0;
}

这是一个纯粹的虫子吗?或者它不是一个bug,如果它没有调用另一个函数并且st没有传递给myfunc2中的另一个函数。当myfunc2获取指针并将其传递给另一个函数时,st是否与myfunc2引用的相同?

5 个答案:

答案 0 :(得分:3)

这是完全有效的代码。您可以将其传递给myfunc2中的任意数量的函数。您在堆栈上分配的变量将保持有效,直到它超出myfunc

的范围

答案 1 :(得分:1)

这取决于MyStruct是否定义在myfunc2()可见的范围内,以及myfunc2()期望的参数。

编辑:通过编辑包含函数原型,它肯定是完全有效的代码。

答案 2 :(得分:0)

将局部变量的地址传递给函数没有任何问题,但是当包含函数返回时,请记住变量超出范围(并且指针停止有效)。如果myfunc2()可能会保存指针供以后使用,请小心。

答案 3 :(得分:0)

如果以正确的方式使用myfunc2,则显示的代码有效。您需要告诉我们myfunc2的语义(或显示实现),以便让我们说出一切正常。

答案 4 :(得分:0)

传递局部变量的地址而不是数组是完全正确的,相当于传递大小为1的数组。

然而,代码的问题在于myfunc2()无法知道传递给它的数组的大小。我想如果它只使用数组的第一个元素就可以,但是它应该被声明为接受一个指针,而不是一个数组。