通过引用传递对象和基元之间的区别
Difference between passing by reference with Objects and primitives
假设我们有 2 个数字,我们想用引用调用的方法交换它们。 它看起来像这样:
int main(){
int a = 10;
int b = 20;
swap(a, b);
}
void swap(int &a, int &b) {
int tmp = a;
a = b;
b = tmp;
}
它会交换 a 和 b 的值,即使在 main-method中也是如此,因为它使用引用更改了它。
现在,让我们举一些示例类"猫">
class Cat{
public:
char _name[20];
Cat(char name[]);
~Cat();
static void meowName(Cat &cat);
};
所以我想,当我们传递一个参考(地址(时,我可以这样做:
void Cat::meowName(Cat &cat){
Cat *pCat = cat; // as variable Cat should be an address already
printf("My name is: %sn", pCat->name);
}
当然,我需要做*pCat = &cat
但究竟为什么呢? 我们实际上不是传递变量的地址,而只是传递对象本身而不是变量的副本吗?
附言不介意meowName方法,我想了解按实例和按引用调用方法之间的区别。 :)
谢谢
实际上通过引用传递不同于通过指针传递,引用是变量的第二个名称
int a = 2;
int & b = a;
在这种情况下,b 不是指针,它是变量 A 的第二个名称,即具有单个内存地址的同一变量,可以通过两个名称访问,因此您无法执行此操作
int * c = b; //this is wrong
我希望这有帮助
Cat &cat = value;
cat 不保存地址,它是对值的引用。 因此,您必须使用运算符 (&( 的地址将其分配给指针。
Cat *ptr = &cat;
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?