别名 (函数的引用)
引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。
#include<stdio.h>
void swap(int &a,int &b)
{
int t;
t=a;
a=b;
b=t;
printf("%d %d",a,b);
}
int main()
{
int a=10,b=20;
swap(a,b);
printf("%d %d",a,b);
}
同样可以实现swap功能,&a&b相当于a,b的一个别名
形参与实参
函数传值调用
如果直接定义形参void max(int a,int b)那么此函数执行结束后,a,b的值与main函数中a,b在不同内存空间,他们互不影响。
函数的传址调用
1.指针指向的地址当做形参
void max(int *a,int *p) //define function c
{
}
//如果是声明函数,其实只要写明类型让电脑知道有这么个类型即可
main()
max(int &a,int &b); //调用
2.数组名当做形参
#include<stdio.h>
void sort(int x[]);
void main()
{
int x[5],i;
for(i=0;i<5;i++)
{
scanf("%d",&x[i]); //**取数组中单个的元素,尤其注意&这个区地址符千万不能忘**
}
sort(x);
for(i=0;i<5;i++)
printf("%5d",x[i]);
}
void sort(int x[])
{
int i,j,t;
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
{
if(x[j]>x[j+1])
{
t=x[j];
x[j]=x[j+1];
x[j+1]=t;
}
}
}
二维数组名做实参(字符串数组)
注意:1.形参的行可以不写,但列必须写明列
2.二维数组a[3][78]中。
a[i]表示每一行首地址,由这个地址可利用指针表示每一行的字符串
。
递归调用
1.用if语句结束循环
2.递归分为 回溯阶段 和递归阶段
3.递归的本质在汉诺塔习题中体现的淋漓尽致,一直通过后一项推前一项,类似于数学数列部分的递推公式。
4.但函数执行效率方面并不尽如人意
注意的部分
1.函数不可嵌套定义
但可以嵌套调用