现在的位置: 首页 > 综合 > 正文

“引用变量”和“将引用用作函数参数”

2014年02月27日 ⁄ 综合 ⁄ 共 1192字 ⁄ 字号 评论关闭

一.   引用变量

引用变量使用&来声明。&并不是地址操作符,而是类型标示符的一部分。

int main(int argc, char* argv[])

{

int x = 2;

int & y = x;

y = 3;

int m = 4;

printf("x = %d, y = %d, m = %d/n", x, y, m);

printf("x address = %d, y address = %d/n", &x, &y);

 

printf("/ny = m;/n");

y = m;

printf("x = %d, y = %d, m = %d/n", x, y, m);

printf("x address = %d, y address = %d, m address = %d/n", &x, &y, &m);

return 0;

}

执行结果:

x = 3, y = 3, m = 4

x address = 1310588, y address = 1310588

 

y = m;

x = 4, y = 4, m = 4

x address = 1310588, y address = 1310588, m address = 1310580

通过上例可以看出:

xy指向相同的地址,xy的值相等。

m修正y的值,但没有改变y的引用,依然指向x

引用必须赋初值,并且不能改变;所以int & y = x;等价于int * const py = &x;

引用y和表达式(*py)扮演了相同的角色。

 

二.   将引用用作函数参数

引用经常被用于函数参数,使得函数中的变量名称为调用程序中的变量的别名。这种按照引用传递可以直接访问调用函数中的变量。

int main(int argc, char* argv[])

{

        int x = 10;

        int y = 20;

        printf("x = %d, y = %d/n", x, y);

        swapref(x, y);

        printf("/ncall swapref(x, y);/n");

        printf("x = %d, y = %d/n", x, y);

        return 0;

}

 

void swapref(int &x, int &y) {

        int temp = x;

        x = y;

        y = temp;

}

执行结果:

x = 10, y = 20

 

call swapref(x, y);

x = 20, y = 10

 

如果向swapref(x +2 y)传递这样的参数,编译器会给出错误信息,因为x+2并不是变量。但在参数为const引用时,C++却允许这样做,此时仅仅是使用变量,并不能对其进行赋值操作。

int main(int argc, char* argv[])

{

        int x = 5;

        int y = square(x+1);

        printf("x = %d, the result = %d/n", x, y);

        return 0;

}

 

int square(const int &  x) {

        return x*x;

}

执行结果:x = 5, the result = 36

 

 

抱歉!评论已关闭.