2011-01-21 52 views
0
int myfunc2(struct MyStruct st2[]) 
{ 

    return 0; 

} 

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

这是一个纯粹的错误吗?或者它不是一个错误,如果它没有调用另一个函数,并且st没有传递给myfunc2中的另一个函数。当myfunc2获取指针并将其传递给另一个函数时,st可以与myfunc2引用的一样吗?C问题:传递函数栈中定义的变量var

+0

`st`和`St`是不同的。你有错字还是你有`st`定义的地方? – 2011-01-21 15:07:15

+0

这里有什么问题?你是否得到了意想不到的结果? – 2011-01-21 15:07:53

回答

3

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

1

它取决于MyStruct是否定义在myfunc2()可见的作用域以及myfunc2()所期望的参数。

编辑:与您的编辑包括一个函数原型,它肯定是完全有效的代码。

0

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

0

如果以正确方式使用myfunc2,则显示的代码是有效的。您需要告诉我们myfunc2的语义(或显示实施),以便让我们说出是否有任何问题。

1

传递一个局部变量,而不是一个数组的地址是完全正常和相当于通过尺寸1.

与您的代码的问题的阵列,但是,是myfunc2所()没有办法知道传递给它的数组的大小。我想如果它只使用数组的第一个元素,那么它可能会被声明为接受一个指针,而不是数组。