int myfunc2(struct MyStruct st2[])
{
return 0;
}
int myfunc()
{
struct MyStruct st;
myfunc2(&st);
return 0;
}
这是一个纯粹的虫子吗?或者它不是一个bug,如果它没有调用另一个函数并且st没有传递给myfunc2中的另一个函数。当myfunc2获取指针并将其传递给另一个函数时,st是否与myfunc2引用的相同?
答案 0 :(得分:3)
这是完全有效的代码。您可以将其传递给myfunc2
中的任意数量的函数。您在堆栈上分配的变量将保持有效,直到它超出myfunc
答案 1 :(得分:1)
这取决于MyStruct是否定义在myfunc2()可见的范围内,以及myfunc2()期望的参数。
编辑:通过编辑包含函数原型,它肯定是完全有效的代码。
答案 2 :(得分:0)
将局部变量的地址传递给函数没有任何问题,但是当包含函数返回时,请记住变量超出范围(并且指针停止有效)。如果myfunc2()
可能会保存指针供以后使用,请小心。
答案 3 :(得分:0)
如果以正确的方式使用myfunc2
,则显示的代码有效。您需要告诉我们myfunc2
的语义(或显示实现),以便让我们说出一切正常。
答案 4 :(得分:0)
传递局部变量的地址而不是数组是完全正确的,相当于传递大小为1的数组。
然而,代码的问题在于myfunc2()无法知道传递给它的数组的大小。我想如果它只使用数组的第一个元素就可以,但是它应该被声明为接受一个指针,而不是一个数组。