为什么“doub(int x)”不会改变 int x 的实际值
Why does ```doub(int x)``` not change the actual value of the int x?
我正在学习编程C++专门处理指针。在下面的代码中,我不明白为什么doub(int x)
不改变y
的值,而trip(int* x)
和quint(int& x)
都这样做。我知道最后两个函数都接收对象的地址,而第一个函数接收对象的地址。非常感谢任何解释或资源链接!
#include <iostream>
using namespace std;
void doub(int x) {
x = x * 2;
}
void trip(int* x) {
*x = *x * 3;
}
void quint(int& x) {
x = x * 5;
}
int main() {
int y = 7;
doub(y);
cout << y << endl; // prints 7 why does this not print 14?
trip(&y);
cout << y << endl; // prints 21
quint(y);
cout << y << endl; // prints 105
}
void doub(int& x) {
x = x * 2;
}
将更改main
中y
的值。发生这种情况是因为int x
创建整数的副本,而int& x
通过引用传递它(类似于指针,有点(。
编辑以更多地解释引用:实际上,您现在越接近理解,就是说当您通过引用传递时,int& x
中的x
将是main
中y
变量的另一个名称,或者换句话说,别名。另一方面,int x
创建一个临时整数,该整数是原始整数的副本。
这将打印 7,因为它是无指针大小写。该值在函数调用时被复制到堆栈,并在函数返回时弹出。
要改变它,这就是我们有指针的原因。让它不那么丑陋是我们有参考文献的原因。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 变量没有改变?通过向量的函数调用
- 在 ENG US 和 ENG INT 之间切换时,GetKeyboardLayout() 不会改变
- 为什么“doub(int x)”不会改变 int x 的实际值
- G 警告:从INT转换为UINT16_T可能会改变其值
- 从 int 转换为 std::array<unsigned char, 1ul>::value_type 可能会改变其值
- gcc 奇怪的转换警告(<B>从"int"转换为"A::count_type {aka short unsigned int}"可能会改变其值)
- 不被类函数改变的私有int值
- c++改变了从double到int的隐式转换
- 通过作为参数传递的指针改变int变量的值
- 为什么按位否定运算符"~"转换为 int?(从"int"转换为"无符号字符"可能会改变其值)
- 每次我通过ifstream读取一个特定的输入时,输入就会改变,可能是int溢出
- 如何将int型转换为unsigned long型而不改变任何位?
- C++如果我把参数参数从int*改为int,这些函数的调用会如何改变