函数在我看来最主要在于函数参数的传递,其余的与正常编程无太大差别
函数参数传值方式:
1.传数值
2.传地址
3.引用
引用:
类型名 &引用名=变量名
相当于一个变量的别名
int n=4;
int &r=n; //&在声明变量语句中作为引用
r=4;
cout<<r; //输出4
cout<<n; //输出4
n=5;
cout<<r; //输出5
引用例子
void swap(int &a,int &b) //此处形参为引用
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int main()
{
int n1,n2;
cin>>n1>>n2;
swap(n1,n2);
cout<<n1<<n2;
}
传地址:
指针变量
内容为地址,指向地址存放的变量为目标变量。
定义方法
类型标识符 *变量名;
int i; //此时系统分配地址存储i
&i; //&在正常语句中为取址符
int *i_point,*j_point; //定义方法,*为定义指针
int *i_point=&i; //定义并赋初值的简单方法(比较方便)
*i_point=3; //*为取内容运算
指针变量的值一定为地址,地址内的目标变量一定与类型标识符相同。(与不同变量所占字节有关)
绝对不能对未赋值的指针变量作“取内容”运算。(此时指针变量内地址随机,可能损害内存)
对指针变量取内容运算对值的修改会影响目标变量的值,如:
int i,*p;
p=&i;
*p=10;
cout<<i; //此时输出10
分清取地址,取内容,定义指针,引用,即可对指针变量、引用熟练操作。
指针运算
++(--):指向下一个(上一个)同种类型的数据
int a[4];int *p=a;p++; //此时指针p为数组a首地址也就是a[0]的地址
//p++相当于p指向的地址先后加相应类型大小的空间之后的位置
//要求p++之后的地址与定义时变量类型相同
指针与数组
指针与数组其实很相似,数组名即为数组的首地址,也就可以作出如下定义:
int a[4];
int *p=a;
指针传递函数参数
void swap(int *p1,int *p2)
{
int t;
t=*p1;*p1=*p2;*p2=t;
}