我正在做一个程序而且它正在工作,但我不确定它是否适用于所有情况,因为它不常见。
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);
}
我很感激你的帮助,因为我完全混乱。
答案 0 :(得分:1)
您的第一个示例是正确的 - 您通过引用int
传递func()
。
你的第二个例子也很好(现在你已经编辑了它)。在这种情况下,您将int *
的值传递给func()
。
你的第三和第四个例子也是正确的。在第三个中,您通过引用传递float *
。在第二种情况下,您通过值传递float **
(这在语义上类似于通过引用传递float *
,这可能就是您将它们混淆的原因)。
没有什么"传统"或者"非传统的"关于你的任何示例代码。所有这一切都是100%正确,并将正常工作。虽然按值传递指针和通过引用传递之间存在一些微妙的语义差异,但这些示例都可以。
答案 1 :(得分:0)
表单Func(int &x)
是通过引用传递的c ++形式c不支持此功能。通过指针传递逻辑上是模棱两可的。 comnplier会在调用中隐含地为您提供地址。
在C中你总是声明
Func(int *x)
{ ... }
并称之为
Func(&SomeInt);