由于来的比较急,就发了贴子,现在自己搞定了这个小问题.下面是我的总结,希望给遇到同样问题的朋友一个小参考.....
SqL(Sq &L)事实上是一个引用,就是传递进来的是地址值,相当于指针,如果在这个函数内部进行数值操作就可以改变原来传递的实参值
下面是我给出两个例子来对比....
#include "iostream.h"
struct SqList
{
int v1;
};
void Sq(SqList L)
{
L.v1=30;
cout<<L.v1<<endl; //此处在于对比调用前后变化
}
void main()
{
SqList La,Lb;
La.v1=20; //此处的结构体变量La没有调用函数前,其成员v1值是20;
cout<<La.v1<<endl; //直接输出肯定是20;
Sq(La); //关键部分在这,进行函数调用时,单向值传递,则函数SqL就打印出L.v1=30,同时La.v1的值却没有变化.
cout<<La.v1<<endl; //所以在这打印出La.v1依然是20;
}
打印结果是:
20
30
20
总结1:单向值传递,互不相干.无变化.
第二个例子:
#include "iostream.h"
struct SqList
{
int v1;
int v2;
};
void Sq(SqList &L) //仅仅加了一个取地址符&,相当于
L是调用它的实参的引用,语言表述不准确,应该可以这样理解...
{
L.v1=30;
cout<<L.v1<<endl;
}
void main()
{
SqList La,Lb;
La.v1=20; /同样,没有调用函数前,La.v1=20;
cout<<La.v1<<endl; //输出La.v1的值是20
Sq(La); //进行函数调用时,因为形参L改变了,即L.v1=30,因为L引用La,所以处于同一个内存地址,L改变,La也改变.....,打印L.v1=30;
cout<<La.v1<<endl; //所以这句就很好解释,就是La.v1=30
}
打印结果是:
20
30
30
总结一下:Sq &L,简单一句话理解就是L引用其实参La(在本例中,也就是共处同一段地址);更简单点理解,就是一指针
虽然例子有点简单,但可以引出很多更复杂的结构设计,可以参阅网上的相关文章,希望能给大家一点帮助,也算是自己的学习心得,加深印象,呵呵