将变量传递给函数&在标题中

时间:2012-01-24 21:17:26

标签: c++ pointers reference

我正在做一个程序而且它正在工作,但我不确定它是否适用于所有情况,因为它不常见。

void func (int &num){
    num=blah;
}

int main() {
    int num;
    func(num);
}

我知道这样做的传统方式如下所示,但我仍然有很多以前格式的代码我不想改变,因为它工作得很好。我不明白的是我是否只是幸运。

void func (int* num){
    *num=blah;
}

int main() {
    int num;
    func(&num);
}

实际上它的版本也有点复杂:

void func(float* &list){
    list=new float[3];
}

int main() {
    float *list;
    func(list);
}

我再次理解传统的做法如下。

void func(float** list){
    *list=new float[3];
}

int main(){
    float *list;
    func(&list);
}

我很感激你的帮助,因为我完全混乱。

2 个答案:

答案 0 :(得分:1)

您的第一个示例是正确的 - 您通过引用int传递func()

你的第二个例子也很好(现在你已经编辑了它)。在这种情况下,您将int *的值传递给func()

你的第三和第四个例子也是正确的。在第三个中,您通过引用传递float *。在第二种情况下,您通过值传递float **(这在语义上类似于通过引用传递float *,这可能就是您将它们混淆的原因)。

没有什么"传统"或者"非传统的"关于你的任何示例代码。所有这一切都是100%正确,并将正常工作。虽然按值传递指针和通过引用传递之间存在一些微妙的语义差异,但这些示例都可以。

答案 1 :(得分:0)

表单Func(int &x)是通过引用传递的c ++形式c不支持此功能。通过指针传递逻辑上是模棱两可的。 comnplier会在调用中隐含地为您提供地址。

在C中你总是声明

Func(int *x)
{ ... } 

并称之为

Func(&SomeInt);