通过引用传递的int型与传递的int型的地址之间的区别
Difference between an int passed by reference and a passed address of an int
void VoidRef (int &ref){
ref++;
}
void VoidPtr (int *ptr){
(*ptr)++;
}
int test= 5;
VoidRef(test);
cout << test; // is 6
VoidPtr(&test);
cout << test; // is 7 !
为什么两个void做同样的事情?哪个空洞需要更多的资源?
void VoidRef (int &ref){
//^^pass by reference
ref++;
}
void VoidPtr (int *ptr){
//^^ptr stores address of test
(*ptr)++;
}
Why do both voids do the same thing?
ref
是对测试的引用,即test
的别名,因此对ref
的操作也要对test
进行操作。
ptr
是存储test
的内存地址的指针,因此(*ptr)++
将存储在内存地址上的值增加1。第一个输出为6,第二个输出为7的原因是,对这两个函数的每次调用都会使变量值增加1。
可以对变量test
的地址进行think of
、VoidRef
和VoidPtr
的操作,因此它们具有相同的效果。
相关文章:
- int x 和 int x=0 之间的差异在C++
- 在 C 和 C++ 中作为函数参数,int **a 和 int a[][] 之间有什么确切的区别
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 使用模板在size_t和int之间进行隐式类型转换
- 在 ENG US 和 ENG INT 之间切换时,GetKeyboardLayout() 不会改变
- 使用 double 在 C++ 中初始化 int 之间的差异
- C :使用函数过载与CHAR到INT之间的隐式转换,反之亦然
- 为什么字符串和 int 之间的 + 运算符充当 substr
- int f(int *i) 和 int f(int &i) 之间的区别
- "new int[5]"和"malloc(5 * sizeof(int))"之间的C++有什么区别?
- 在“有符号的 int”和“无符号的 int”之间进行添加
- 一个关于C++中double和int之间转换的奇怪结果
- 向量 <int> V[] 和向量<向量<int> > V 之间的区别
- map< "string" ,..> 和 map<int,..> 之间的性能差异?
- int p = *(int *)i 和 int p = *(int *)&i 之间的区别
- int x{} 之间有区别吗?和整数 x = 0;
- int[n][n] 和 int** 之间的关系
- C++字符和 int 之间的转换,结果错误
- void(int) 和 void (*)(int) 之间的区别
- int someInts[3]和int*someInts=new int[3]之间的差异