"&"在C++中意味着什么?

Eri*_*tto 7 c c++

"&"在C++中意味着什么?在功能范围内

void Read_wav::read_wav(const string &filename)
{

}
Run Code Online (Sandbox Code Playgroud)

它在C中的含义是什么?

谢谢


编辑1

如果我想将上面的C++函数转换为C函数,我该怎么做?

unw*_*ind 12

这意味着变量是一个参考.在C中没有直接的等价物.您可以将其视为在使用时自动解除引用的指针,并且可能永远不会为NULL.

在C中表示字符串的典型方法是使用char指针,因此函数可能如下所示:

void read_wav(struct Read_wav* instance, const char *filename)
{
}
Run Code Online (Sandbox Code Playgroud)

注意:这里的第一个参数模拟了thisC++中的隐式对象引用,因为它看起来像一个成员方法.


Bri*_*ian 12

在该上下文中,&使变量成为引用.

通常,当您将变量传递给函数时,将复制该变量,并且该函数将在该副本上运行.函数返回时,原始变量不变.传递引用时,即使在函数返回后,也不会复制该函数所做的更改.

C没有引用,但C++引用在功能上与C中的指针相同.真正唯一的区别是指针在使用时必须被解引用:

    *filename = "file.wav";
Run Code Online (Sandbox Code Playgroud)

但是可以使用引用,就像它们是原始变量一样:

    filename = "file.wav";
Run Code Online (Sandbox Code Playgroud)

表面上看,引用应该永远不会为空,尽管这种情况并非不可能发生.

等效的C函数是:

     void read_wav(const char* filename)
     {

     }
Run Code Online (Sandbox Code Playgroud)

这是因为C没有string.C中的常规做法是在需要字符串时发送指向字符数组的指针.与在C++中一样,如果键入字符串常量

    read_wav("file.wav");
Run Code Online (Sandbox Code Playgroud)

类型是const char*.