- 被传入函数的函数是否会改变
①
int a;
void f(int x)
{
++x;
}
a = 0;
f(a);
②***普通变量的引用型***
int a;
void f(int &x)
{
++x;
}
a = 0;
f(a);
①,②相比,区别在于:
①中先定义了a;而后执行x = a; ++x;
②中利用到函数的引用型,相当于用a取代了x的位置对a本身进行操作。
指针的引用型
void f(int *&x)
数组的引用型
void f(int x[],int n)//不需要确定数组长度;
二维数组的引用型
void f(int x[][5],int n)//第二个括号必须写上数组长度;
注:所传入的数组的第二维长度也得是maxSize。
void f(int [] [5])
{
...;
}
int a[10][5];
int b[10][3];
f(a); //参数正确
f(b); //参数错误
对于数组来说,没有引用型和非引用型之分。
2.关于参数引用型的其他例子
1)插入数据
void insert (Sqlist &L,int x)//L的数据更改,所以要用引用型
{
int p,i;
p = LocateElem(L,x);
for(i = L.length-1;i>=p;--i)
L.Data[i+1] = L.Data[i];
L.data[p] = x;
++(L.lenght);
}
2)
int SearchAndDelete(LNode *C,int x)//C是指向链表表头的指针
{
Lnode *p,*q;
p = c;
while(p->next != NULL)
{
if(p->next->data == x)
break;
p=p->next;
}
if(p->next == NULL)
return 0;
else
{
q = p->next;
p->next = p->next ->next;
free(q);
retrun 1;
}
}
3)
void merge (LNode *A,LNode *B,LNode *&C)\
{
LNode *p = A ->next;
LNode *q = B ->next;
LNode *r;
C = A;
C ->next = NULL;
free (B);
r = C;
......
}
3.有返回值的函数
int f(int a) //返回值类型为长整型
void() //无返回值类型