C++之引用

引用和指针的区别

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main() {
    system("chcp 65001");
    int a = 10;
    int &b = a;
    int c = 20;
    int *p;
    p = &a;
    cout << "指针p指向a的地址: " << p << endl;
    p = &c;
    cout << "指针p指向c的地址:" << p << endl;
    cout << "a的地址:" << &a << endl
         << "a引用b的地址:" << &b << endl;
    return 0;
}
输出:
Active code page: 65001
指针p指向a的地址: 0x63fe0c
指针p指向c的地址:0x63fe08
a的地址:0x63fe0c
a引用b的地址:0x63fe0c

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

C++ 引用 与 指针的区别
引用很容易与指针混淆,它们之间有三个主要的不同:

1.不存在空引用。引用必须连接到一块合法的内存。
2.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
3.引用必须在创建时被初始化。指针可以在任何时间被初始化。

将引用作为参数传递给函数

传引用参数给函数,比传一般的参数更安全。

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void exchange(int &x, int &y);

int main() {
    system("chcp 65001");
    int a = 10;
    int b = 20;
    cout << "交换前a和b的值:" << a << "  " << b << endl;
    exchange(a, b);
    cout << "交换后a和b的值:" << a << "  " << b << endl;
    return 0;
}

void exchange(int &x, int &y) {
    int temp = 0;
    temp = x;
    x = y;
    y = temp;
}
输出:
Active code page: 65001
交换前a和b的值:10  20
交换后a和b的值:20  10

将引用作为函数的返回值

#include <iostream>

using namespace std;

char str[] = {'a', 'b', 'c', 'd', 'e'};

char &ch(int x);

template<class T>
int get_array_length(T &arr);

int main() {
    system("chcp 65001");
    int size = get_array_length(str);
    cout << "--------原始数组ch元素的值--------" << endl;
    for (int i = 0; i < size; ++i) {
        cout << str[i] << endl;
    }
    ch(1) = 'a';
    ch(2) = 'h';
    cout << "---------改变后的ch元素的值--------" << endl;
    for (int i = 0; i < size; ++i) {
        cout << str[i] << endl;
    }
    return 0;
}

char &ch(int x) {
    char &quote = str[x];
    return quote;
}

template<class T>
int get_array_length(T &arr) {
    return sizeof(arr) / sizeof(arr[0]);
}
输出:
Active code page: 65001
--------原始数组ch元素的值--------
a
b
c
d
e
---------改变后的ch元素的值--------
a
a
h
d
e

当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。

#include <iostream>

using namespace std;

double &func_test();

int main() {

    double x = 0;
    x = func_test();
    cout << x << endl;
    return 0;
}

double &func_test() {
	//错误写法:double q = 1;
    static double q = 1;
    return q;
}
输出:
1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值