C++ 使用&;将变量传递给函数;在标题中

C++ 使用&;将变量传递给函数;在标题中,c++,pointers,reference,C++,Pointers,Reference,我正在做一个程序,它正在工作,但我不确定它是否在所有情况下都能工作,因为它不是传统的 void func (int &num){ num=blah; } int main() { int num; func(num); } 我知道这样做的常规方法如下,但我仍然有很多以前格式的代码,我不想更改,因为它工作得很好。我不明白的是我是否只是幸运 void func (int* num){ *num=blah; } int main() { int n

我正在做一个程序,它正在工作,但我不确定它是否在所有情况下都能工作,因为它不是传统的

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);
}

非常感谢您的帮助,因为我完全搞糊涂了。

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

您的第二个示例也很好(现在您已经编辑了它)。在本例中,您通过值将
int*
传递给
func()

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

您的任何示例代码都没有“常规”或“非常规”。所有这些都是100%正确的,可以正常工作。尽管通过值传递指针和传递引用之间存在一些微妙的语义差异,但这些示例都是OK。

< P>表格>代码> FUNC(INT&X)是通过引用C的C++形式不支持此。这在逻辑上是通过指针传递的模棱两可。通讯员在通话中隐式地为您提供地址

在C中,您将始终声明

Func(int *x)
{ ... } 
叫它

Func(&SomeInt);

<> >语法> <代码> int和<代码>不是C,而是C++。这就是所谓的参考。如果C(非C++)编译器接受,则它是非标准扩展(对于C++编译器,当然是语言的一部分)。 引用的基本机制是它充当现有对象的名称(或其他名称)。例如:

int a;
int& b = a;
b = 3; /* equivalent to a = 3 */
考虑引用的一种方法是将其视为自动取消引用的指针(这也是它通常的实现方式)。也就是说,上述代码相当于

int a;
int* pb = &a;
*pb = 3;

你不能使用C++引用运算符(&)和C。实际上我用C++,我认为指针是C。我建议你先读一些东西?“Kialas-C++也有指针。你的问题涉及C++而不是C,所以我适当地对此进行了修改。我知道C++也有指针,但我的假设是C++没有改进。无论如何,谢谢,我明白了。第一个和第二个例子应该做同样的事情。第三个和第四个也应该这样做。第二个中的
func()
的签名已更改为
func(int*num)
@Jens,不,我已经为OP.hmjd准备好了。我会准备好我的答案。嗯,现在问题完全改变了,被另一种编程语言标记了。。。的确是一个相当混乱的问题。@Jens-OP是一个新用户,并且错误地标记了它。我做了一些编辑来清理这篇文章,希望它对网站更有用。如果值不能为null,那么你应该声明int*版本如果值不能为null声明int&version.int*表示指向int的指针,int&表示指向int的引用,int**表示指向int的指针。