Q:这里我们引入一个例子,让你明白为什么要使用指针或者引用?能不能不用?
最近复习数据结构的一点笔记,温故可以知新
假设你要设计一个swap函数,交换两个数的值,你会写一下几种情况
1.指针
#include <iostream>
using namespace std;
void swap(int *a,int *b)
{
int temp=*b;
*b=*a;
*a=temp;
}
int main()
{
int a=10;
int b=20;
swap(a,b);
cout<<"a is :"<<a<<" b===" <<b<<endl;
system("pause");
return 1;
}
运行结果是:
2.引用
#include <iostream>
using namespace std;
void swap(int &a,int &b)
{
int temp=b;
b=a;
a=temp;
}
int main()
{
int a=10;
int b=20;
swap(a,b);
cout<<" quote a is :"<<a<<" b===" <<b<<endl;
system("pause");
return 1;
}
3.一般
#include <iostream>
using namespace std;
int c=0,d=0;
void swap(int a,int b)
{
int temp=b;
b=a;
a=temp;
c=a;
d=b;
}
int main()
{
int a=10;
int b=20;
swap(a,b);
cout<<" global: a is :"<<c<<" b===" <<d<<endl;
system("pause");
return 1;
}
4.错误的
#include <iostream>
using namespace std;
void swap(int a,int b)
{
int temp=b;
b=a;
a=temp;
}
int main()
{
int a=10;
int b=20;
swap(a,b);
cout<<" fatal: a is :"<<a<<" b===" <<b<<endl;
system("pause");
return 1;
}
A:总结一下,
以下是线性表的基本操作一些信息,&只在C++使用,在C语言无法使用
InitList(&L):
Length(&L):
LocateElem(L,e):
GetElem(L,i):
ListInsert(&L,i,e):
ListDelete(&L,i,e):
PrintList(L):
…
Q2:有些参数加“&”号,而有些没有加,这是为什么呢?
A2:答案很简单,加“&”必然是改变了线性表的数据信息,也可以创建新的线性表来保存修改后的信息,这样就不用加“&”号,当然会需要额外的空间
而不加“&”的没有改变线性表的数据信息,无需。也可以把&换成,改用指针也可以*
PS:当然,为了避免麻烦,无论修不修改线性表信息,你都可以加&,变为以下形式
InitList(&L):
Length(&L):
LocateElem(&L,e):
GetElem(&L,i):
ListInsert(&L,i,e):
ListDelete(&L,i,e):
PrintList(&L):
这是允许的