首页 > 试题广场 >

什么是“引用”?申明和使用“引用”要注意哪些问题?

[问答题]
什么是“引用”?声明和使用“引用”要注意哪些问题?
引用相当于变量别名,指向该变量,用取地址符 ‘&’  加上变量名表示,例如 &a,  表示存储a变量的地址 。声明引用时必须同时初始化,不能为空,而且初始化之后不可更改。例如
    int a = 0; 
    int &b ; //错误,没有初始化
    int &b = a;  //正确,声明了一个引用b, 同时初始化了,也就是b是a的别名

在函数传参过程中,有两种机制,一种是传值调用, 传的是变量的值的副本,函数执行完后,变量值不变。另一种是引用调用,实际上传的是该变量的地址,函数执行完后,变量的值会发生改变。

例如:实现 a和b的数值交换函数:
 swap1(int a,  int b)
{
      int temp;
      temp = a;
      a = b;
      b = temp;
}
 swap1(int &a,  int &b)
{
      int temp;
      temp = a;
      a = b;
      b = temp;
}

int main()
{
     int a = 1;
     int b = 2;
     int c = 3;
     int d = 4;
     swap1(a,b);
     swap2(c,d);  //直接用变量名替代 引用参数
     printf("a = %d, b = %d \n", a, b); printf("c = %d, d = %d \n", c, d);
     return 0;
}

那么结果会是 :a = 1, b = 2  //a,b 实际未被交换
                          c = 4, d = 3  //c,d 被交换 

发表于 2016-06-29 14:46:32 回复(0)
答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。
发表于 2014-10-25 00:26:11 回复(1)