C++中的引用和指针都是用来操作变量或对象的,但是它们有着不同的语义。引用是指向变量的指针,可以通过引用来修改变量的值,而指针是指向数据的指针,可以通过指针来访问数据。
在C++中,引用和指针的关系可以通过以下几个方面来说明:
1、引用&
和指针*
的定义
引用&
是一个指针变量,它指向一个已经存在的变量。引用的值是指针指向的内存地址,可以通过引用来修改变量的值。
指针*
是一个变量,它存储了一个内存地址。指针可以指向不同类型的数据,例如整数、浮点数、字符等。指针可以通过指针来访问数据,例如访问数组元素、函数参数等。
2、引用和指针的使用
引用和指针的使用方式有所不同。引用可以用来修改变量的值,而指针可以用来访问数据。
例如,如果有一个指向整数的指针变量p,可以通过下面的方式来修改p指向的整数的值:
int *p = &a; // 定义一个指向整数的指针变量p
*p = 100; // 通过p指向的地址来修改p指向的整数的值
同样地,如果有一个指向字符的指针变量p,可以通过下面的方式来访问p指向的字符:
char *p = &a; // 定义一个指向字符的指针变量p
*p = 'a'; // 通过p指向的地址来访问p指向的字符的值
需要注意的是,当通过指针来访问数据时,必须确保指针指向的内存地址是有效的,否则可能会导致程序崩溃或者出现其他错误。
3、引用和指针的区别(简略)
- 指针可以在定义的时候不初始化,引用必须在定义的时候初始化。
- 指针可以指向NULL,引用不可以为NULL。
- 指针初始化之后可以再改变,引用不可以。
4、Code案例
#include <iostream>
using namespace std;
int main () {
int var = 20; // 实际变量的声明
int *ip; // 指针变量的声明
int &ref = var; // 引用变量的声明
ip = &var; // 在指针变量中存储 var 的地址
cout << "var 变量的值:";
cout << var << endl;
// 输出在指针变量中存储的地址
cout << "存储在 ip 变量中的地址:";
cout << ip << endl;
// 访问指针中地址的值
cout << "*ip 变量的值:";
cout << *ip << endl;
// 输出引用变量的值
cout << "ref 变量的值:";
cout << ref << endl;
// 修改引用变量的值
ref = 30;
cout << "修改ref后:" << endl;
cout << "var 变量的值:";
cout << var << endl;
cout << "ref 变量的值:";
cout << ref << endl;
// 修改指针变量中地址的值
*ip = 40;
cout << "修改*ip后:" << endl;
cout << "var 变量的值:";
cout << var << endl;
cout << "*ip 变量的值:";
cout << *ip << endl;
return 0;
}
运行如下: