通过引用函数传递值的目的是什么?
what is the purpose of passing a value by reference to a function?
这是一个例子:
"ArrayList.cpp"
.....
...
..
void Stack::putSurname(employee& e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
......
....
..
void Stack::push(employee e)
{
pos++;
employeeList[pos] = e;
}
......
....
..
"ArrayList.h"
.......
.....
..
struct employee
{
string name, surname;
int age;
};
class Stack
{
public:
employee employeeList[1000];
int pos =-1;
public:
bool isEmpty();
void push(employee e);
....
......
........
在函数 putSurname 中,为什么我必须通过引用传递变量 employee 才能看到 employeeList 数组中的变化?
通过引用传递变量的目的是每次调用函数时变量在内存中的位置都会改变,所以我每次都分配不同的存储变量吗?
让我们想象一下下面的场景。
employee emp;
employee& e2 = emp;
然后,e2
成为emp
的引用变量。您可以使用 e2
更改对象 emp
.
考虑一下你的putSurname
方法
void Stack::putSurname(employee& e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
您必须按如下方式调用该函数。
employee emp;
putSurname(emp);
然后在你的方法中 putSurname
,e
将作为 emp
的参考变量,你对 e
所做的任何更改都会反映到 emp
.
如果你的方法如下。
void Stack::putSurname(employee e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
您仍然可以调用该方法
employee emp;
putSurname(emp);
但在这里,该函数将创建您的 emp
员工对象的副本(按值传递)以执行其任务。然后你知道,因为它是一个副本,所以更改不会反映回 emp
。并且该变量将在函数执行后从堆栈中删除。那么您将丢失所做的所有更改。
希望对您有所帮助。
这是一个例子:
"ArrayList.cpp"
.....
...
..
void Stack::putSurname(employee& e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
......
....
..
void Stack::push(employee e)
{
pos++;
employeeList[pos] = e;
}
......
....
..
"ArrayList.h"
.......
.....
..
struct employee
{
string name, surname;
int age;
};
class Stack
{
public:
employee employeeList[1000];
int pos =-1;
public:
bool isEmpty();
void push(employee e);
....
......
........
在函数 putSurname 中,为什么我必须通过引用传递变量 employee 才能看到 employeeList 数组中的变化?
通过引用传递变量的目的是每次调用函数时变量在内存中的位置都会改变,所以我每次都分配不同的存储变量吗?
让我们想象一下下面的场景。
employee emp;
employee& e2 = emp;
然后,e2
成为emp
的引用变量。您可以使用 e2
更改对象 emp
.
考虑一下你的putSurname
方法
void Stack::putSurname(employee& e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
您必须按如下方式调用该函数。
employee emp;
putSurname(emp);
然后在你的方法中 putSurname
,e
将作为 emp
的参考变量,你对 e
所做的任何更改都会反映到 emp
.
如果你的方法如下。
void Stack::putSurname(employee e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
您仍然可以调用该方法
employee emp;
putSurname(emp);
但在这里,该函数将创建您的 emp
员工对象的副本(按值传递)以执行其任务。然后你知道,因为它是一个副本,所以更改不会反映回 emp
。并且该变量将在函数执行后从堆栈中删除。那么您将丢失所做的所有更改。
希望对您有所帮助。