0

例如,如何在 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

4 回答 4

8

最接近的等价物是指向指针的指针;**. C 没有引用。

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

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

someFunction(&data);

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

于 2013-09-13T19:37:48.303 回答
3

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

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

someFunction(&data) ;

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

     *outParamOnly = whatever;

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

于 2013-09-13T19:37:47.623 回答
2

C 没有引用类型,因此对于您所询问的语法没有简单的“等效”。

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

于 2013-09-13T19:38:35.847 回答
1

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

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

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

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

于 2013-09-13T19:40:01.483 回答