什么是C ++'*&'的等价物在C?它甚至存在吗?

时间:2013-09-13 19:34:30

标签: c++ c

例如,如何在C?

中实现这个C ++代码
void someFunction(type *&outParamOnly) ;
returnType someOtherFunction() ;
...
returnType someOtherFunction()
{
    type *data = NULL ;
    someFunction(data) ;
    ...
}
...
void someFunction(type *&outParamOnly)
{
    bool condition ;
    int array_len ;
    ...
    if(condition) // variable's value passed to this function stays as it was
    return ;
    ...
    outParamOnly = new type[array_len] ; // value is moddified and it's reflected in 'someOtherFunction'
    ...
}
...

我问,因为我不知道如何创建这样的等价物。它复杂吗?事实上我对C语言知之甚少,但更多关于C ++语法等等。我习惯用C ++编写,一旦我尝试用C来感受差异,我在尝试实现我想要的东西时表现不佳。我期待积极的回答 - 有可能创造一些等价物, 但它会在C ++或更慢的速度下运行得更快吗? 请回答。

4 个答案:

答案 0 :(得分:8)

最近的等价物是指向指针的指针; **。 C没有参考资料。

通话和功能略有不同;你必须发送一个指向变量的指针,并在你想要使用它时取消引用它:

void someFunction(type **outParamOnly)
    ...
    *outParamOnly = whatever;
}

someFunction(&data);

这是C中相当典型的模式。

答案 1 :(得分:3)

您需要更改函数以接受指向要修改的事物的指针。在这种情况下,由于值是一个指针,你需要声明该函数接受一个双指针。

然后,在调用函数时,传递要修改的值的地址。

someFunction(&data) ;

...
void someFunction(type **outParamOnly)
{

     *outParamOnly = whatever;

或者,您可以从函数返回值,而不是返回void

答案 2 :(得分:2)

C没有参考类型,所以没有简单的"等同的"对于你要问的语法。

可以使用指向指针来模拟该行为。不过,我不确定这是否是合适的解决方案。为什么不只是返回值而不是乱搞各种级别的指针,如果它仍然是输出参数?

答案 3 :(得分:1)

C没有引用,但等效的只是'type **'。

void someFunction(type **outParamOnly)
{
    if( NULL != outParamOnly )
        *outParamOnly = new type[array_len] ;
}

returnType someOtherFunction()
{
    type *data = NULL ;
    someFunction(&data) ;
}

请注意,在分配outParamOnly指向的内容时需要额外的取消引用,并且在调用someFunction时需要传递指向数据的指针。