在数据结构中,int InitList(SqList &L)中的&全部不用,即不用引用,也都可以通过VC,怎么回事啊?
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<iostre...
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<iostream.h>
#define LIST_INIT_SIZE 10
#define OK 1
//#define ERROR 0
typedef int ElemType;
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
int InitList(SqList L)
{
L.elem=(int *)malloc(LIST_INIT_SIZE *sizeof(int));
if (!L.elem) return(0);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return(1);
} //end of InitList_Sq() function
int input(SqList L)
{ int i;
cout<<"请输入待输入的数字个数:";
cin>>L.length;
cout<<"请输入数字";
cout<<endl;
for(i=0;i<L.length;i++)
cin>>L.elem[i];
return OK;
}
int output(SqList L)
{
int i;
for(i=0;i<L.length;i++)
cout<<L.elem[i]<<" ";
return OK;
};
void main()
{
int j,k;
SqList L1;
InitList(L1);
input(L1);
output(L1);
cout<<"\n";
}
这个程序,那就相当于用结构体的名字传递了,可是只有数组的名字才能做首地址传递啊?
其实&是作为引用来处理的,即每次调用函数都是对原结构体进行操作。如果不使用&那么L1永远都没有被操作过,在input中会报错,对一个局部变量L进行赋值时,该内存不可写。 展开
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<iostream.h>
#define LIST_INIT_SIZE 10
#define OK 1
//#define ERROR 0
typedef int ElemType;
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
int InitList(SqList L)
{
L.elem=(int *)malloc(LIST_INIT_SIZE *sizeof(int));
if (!L.elem) return(0);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return(1);
} //end of InitList_Sq() function
int input(SqList L)
{ int i;
cout<<"请输入待输入的数字个数:";
cin>>L.length;
cout<<"请输入数字";
cout<<endl;
for(i=0;i<L.length;i++)
cin>>L.elem[i];
return OK;
}
int output(SqList L)
{
int i;
for(i=0;i<L.length;i++)
cout<<L.elem[i]<<" ";
return OK;
};
void main()
{
int j,k;
SqList L1;
InitList(L1);
input(L1);
output(L1);
cout<<"\n";
}
这个程序,那就相当于用结构体的名字传递了,可是只有数组的名字才能做首地址传递啊?
其实&是作为引用来处理的,即每次调用函数都是对原结构体进行操作。如果不使用&那么L1永远都没有被操作过,在input中会报错,对一个局部变量L进行赋值时,该内存不可写。 展开
展开全部
C++支持引用 &参数 这种方式实际上是将形参与实参看作是同一个变量(即使你把实参与形参的名设置成不同的名称)来操作,比传地址操作确实方便很多!
但是,C不支持这种方式!
但是,C不支持这种方式!
来自:求助得到的回答
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然可以通过,也许这样会更清楚:
void Func(int nX)
{
nX = 1000;
}
int a = 100;
Func(a);
a还是等于100;
//------------------
void Func(int &nX)
{
nX = 1000;
}
int a = 100;
Func(a);
a等于1000;
因为引用相当于一个别名,如果使用引用,函数内使用的还是本身,否则,是一个临时拷贝
void Func(int nX)
{
nX = 1000;
}
int a = 100;
Func(a);
a还是等于100;
//------------------
void Func(int &nX)
{
nX = 1000;
}
int a = 100;
Func(a);
a等于1000;
因为引用相当于一个别名,如果使用引用,函数内使用的还是本身,否则,是一个临时拷贝
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
引用传递的是地址,速率高,而不用引用,需传递整个对象,速率降低
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询