请教下关于线性表中形参和实参的问题(C++),指针和引用?
最近在看线性表,期间也看了好些文章,但对线性表中形参和实参用指针和引用有些混淆,请大家看看代码:
。
代码如下,三个子函数程序是一样的,只是形参类型不同
typedef struct
{
int data[MAX];
int length;
}SqList;//定义线性表
void fun1(SqList *L)
{
int i,j;
for(i=j=0;ilength;i++)
if(L->data[i]>=0)
{
if(i!=j)
L->data[j]=L->data[i];
j++;
}
L->length=j;
}
void fun2(SqList *L)
{
int i,j;
for(i=j=0;ilength;i++)
if(L->data[i]>=0)
{
if(i!=j)
L->data[j]=L->data[i];
j++;
}
L->length=j;
}
void fun3(SqList *&L)
{
int i,j;
for(i=j=0;ilength;i++)
if(L->data[i]>=0)
{
if(i!=j)
L->data[j]=L->data[i];
j++;
}
L->length=j;
}
主函数
int main()
{
int m;
SqList *L;
//方式1
cout<<“执行fun函数”<<endl;
fun1(L);
Display(*&L);
//方式2
cout<<“执行fun函数”<<endl;
fun2( *&L);
Display( *&L);
//方式3
cout<<“执行fun函数”<<endl;
fun3(**&L);
Display(*&L);
按照之前的文章叙述,形参用 *&L,用于实现线性表的长度发生变化,如删除、增加等操作;形参用 *L用于线性表长度不发生变化的操作,如显示线性表的长度等。
但程序测试,这三种都是正确的,下面为三种形参和实参的对应:
1、形参 *L,实参L
2、形参 *L,实参 *&L
3、形参 *&L,实参 *&L
特请教下各位大神,怎么解释这种情况,多谢了。