引用和指针的区别
#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 "e = 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