将变量传递给带有 & 的函数
passing variable to function with & in the header
我正在做一个过程,它正在工作,但我不确定它是否在所有情况下都能工作,因为它不是传统的。
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%正确的,并且会很好地工作。尽管按值传递指针和按引用传递指针之间存在一些细微的语义差异,但这些示例是可以的
int &
的语法不是C,而是C++。这就是所谓的参考。如果你的C(而不是C++)编译器接受is,那么它是一个非标准扩展(当然,对于C++编译器来说,它是语言的一部分)。
引用的基本机制是,它充当现有对象的名称(或另一个名称)。例如:
int a;
int& b = a;
b = 3; /* equivalent to a = 3 */
考虑引用的一种方式是将其视为自动取消引用的指针(这也是它通常的实现方式)。也就是说,上述代码相当于
int a;
int* pb = &a;
*pb = 3;
表单Func(int &x)
是传递引用c的c++形式,不支持此功能。从逻辑上讲,传递指针是模棱两可的。通讯员在电话中隐式地为你取地址。
在C中,您将始终声明
Func(int *x)
{ ... }
并称之为
Func(&SomeInt);
相关文章:
- 未使用的C++未优化的静态成员函数/变量
- 内联函数/变量的外部链接
- 同一函数中的静态函数变量初始化顺序
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何从doxygen输出中排除类的无证件成员函数/变量
- 如何在LUA C API中分配全局LUA函数变量
- 如何将函数变量传递给C lambda函数
- 通过另一个C++函数更改函数变量
- c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突
- C++:静态成员不能在声明时定义,但静态函数变量可以?
- apache-frift是否支持函数变量作为参数
- 类函数/变量在使用之前必须声明
- 函数变量去哪里
- 无法使用函数变量?错误表达式必须具有类类型
- 如何在main中使用函数变量
- 每当尝试打印函数变量时,C++ cout 错误
- 是否存在查看成员函数/变量的整洁等效项
- 访问友元类之间的函数变量
- 函数到函数变量
- 一个定义规则是否强制创建一个静态函数变量