OOP_由C到C++ (7)

(5)声明一个引用,不是新定义了一个变量,系统并不给引用分配存储单元

例1.15 引用的使用 #include <iostream.h> void main() { int i; int &j=i; i=30; cout<<"i="<<i<<"j="<<j<<"\n"; j=80; cout<<"i="<<i<<"j="<<j<<"\n"; cout<<"Address of i"<<&i<<"\n"; cout <<"Address of j"<<&j<<"\n"; }

结果:

i=30 j=30 i=80 j=80 Address of oxfff4 Address of oxfff4 例1.16 使用引用可以简化程序 #include<iostream.h> main() { int i=15; int* iptr=&i; int & rptr=i; cout<<" i is "<<i<<endl; cout<<" *iptr is "<<*iptr<<endl; cout<<" rptr is "<<rptr<<endl; i=29; cout<<" After changing i to 29: "<<endl; cout<<" i is "<<i<<endl; cout<<" *iptr is "<<*iptr<<endl; cout<<" rptr is "<<rptr<<endl; return 0; }

运行结果:

i is 15 *iptr is 15 rptr is 15 After changing i to 29: i is 29 *iptr is 29 rptr is 29 (2) 引用的使用

(1)引用名可以是任何合法的变量名。除了用作函数的参数或返回类型外,在声明时,必须立即对它进行初始化,不能声明完后再赋值。

int i; int &j; j=i;

(2)引用不能重新赋值,不能再把该引用名作为其他变量名的别名,任何对该引用的赋值就是该引用对应的目标变量名的赋值。对引用求地址,就是对目标变量求地址。

int i=5; int &j1=i; int &j2=j1; int num=50; int & ref=num; int *p=&ref;

(3)由于指针变量也是变量,所以,可以声明一个指针变量的引用。方法是: 类型标识符 *&引用名=指针变量名;

#include <iostream.h> void main() { int *a; //定义指针变量a int *&p=a; //定义引用p,初始化为指针变量a,所以p是a的引用(别名) int b=10; p=&b; //等价于a=&b,即将变量b的地址赋给a。 cout<<*a<<endl; //输出变量b的值 cout<<*p<<endl; //等价于cout<<*a; cout<<a<<endl; //输出a和p的地址 cout<<p<<endl; }

(4)引用是对某一变量或目标对象的引用,它本身不是一种数据类型,因此引用本身不占存储单元,这样,就不能声明引用的引用,也不能定义引用的指针

int a; int & & ra=a; //错误 int &*p=&ra; //错误

(5)不能建立数组的引用,因为数组是一个由若干个元素所组成的集合,所以就无法建立一个数组的别名。

(6)不能建立空指针的引用

int &rp=NULL; //错误

(7)也不能建立空类型void的引用,因为尽管在C++语言中有void数据类型,但没有任何一个变量或常量属于void类型。

void &ra=3; //错误

(8) 尽管引用运算符与地址操作符使用相同的的符号,但时不一样的。引用仅在声明时带有引用运算符&,以后就像普通变量一样使用,不能再带&。其他场合使用的&都是地址操作符。

int j=5; int& i=j; // 声明引用i, "&"为引用运算符 i=123; // 使用引用i,不带引用运算符 int *pi=&i; // 在此, "&"为地址操作符 cout<<&pi; // 在此, "&"为地址操作符 (3) 用引用作为函数的参数

一个函数的参数也可定义成引用的形式

void swap(int &p1, int &p2) //形参p1, p2都是引用 { int p; p=p1; p1=p2; p2=p; }

在主调函数的调用点处,直接以变量作为实参进行调用即可,不需要实参变量有任何的特殊要求。

swap(a,b); //直接以a和b作为实参调用swap函数 例1.17 采用指针参数的例子 #include<iostream.h> void swap(int *m, int *n) { int temp; temp=*m; *m= *n; *n=temp; } main() { int a=5, b=10; cout<<"a="<<a<<" b="<<b<<endl; swap(&a, &b); cout<<"a="<<a<<" b="<<b<<endl; return 0; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzsgy.html