函数探幽--引用变量

引用是已定义的变量的别名(另一个名称)。如果将twain作为clement作为变量的引用,则可以交替使用twain和Clemente来表示该变量。

  • 引用变量的主要用途是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据而不是其副本。

创建引用变量

  • 要将rodents作为rats变量的别名

int rats;

int & rodents = rats;

这里的&不是地址运算符,而是类型标识符的一部分。

上述引用声明允许 rats 与 rodents 互换——他们指向相同的值和内存单元。

 

  • 就像指针的声明中 char * 指的是指向 char 的指针一样,int &指的是指向 int 的的引用。

 

引用与指针的比较


int rats = 101;

int & rodents = rats;         //共用一个内存空间

int * prats = &rats;

这样,表达式 rodents 和 *prats 都可以和 rats 互换,

          表达式&rodents 和 prats 都可以和 &rats互换。

指针与引用的差别:

  • 必须在声明引用时将他初始化,而不能像指针那样,先声明再赋值                     但与const指针类似。一旦与某个变量关联起来就将一直效忠于他。
    • int & rodents = rats ;     可伪装表示为      int * const pr = &rats ;

如果引用声明后再赋值,如下

int rats = 100;

int & rodents = rats ;

int  bunnies=50;

rodent = bunnies;             //编译器不会报错,只是将他当作简单的赋值语句。

输出结果:rats = rodents = bunnies =50;

         但是:rats与rodents还是原来的地址               bunnies指向另外一个地址 。

将引用用作函数参数

下面时三种传参方式的声明与调用的对比:

void swapr(int & a,int & b);   //引用传递

void swapp(int * a,int * b);    //指针传递

void swapv(int  a,int  b);          //值传递

 swapr(wallet1,wallet2);   //引用传递

 swapp(&wallet1,&wallet2);    //指针传递     

 swapv(wallet1,wallet2);          //值传递

值传递与引用传递代码的表现形式上基本相同      只有引用传递的声明时   类型符不同

指针传递传过去的是地址,函数中的操作也都是对地址进行。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/gc612/p/9898594.html