int a = 1;
int *pa = &a;
int &refa = a;
如上定义了 a、pa、refa 三个变量,其中
a 是 int 型变量;
pa 是 int* 型变量(指针变量),是指向变量 a 的变量;
refa 是 int 型变量,是 a 变量的引用。
在计算机中,每一个数据都保存在一个地址,即有 地址 -> 数据 这一种组合。
变量 a 中,是 a 的地址 -> a 的值 这种组合
变量 pa 中,是 pa 的地址 -> pa 的值 ,其中 pa 的值 == a 的地址
所以通过变量 pa 访问 a 的值 得通过 * 运算符
在 *pa 中,*pa 的地址 -> *pa 的值 ,其中 *pa 的地址 就是 a 的地址 ,
*pa 的值 就是 a 的值
变量 refa 中,是 refa 的地址 -> a 的值 , refa 的地址 就是 a 的地址
所以访问 *pa 就是访问 a ,访问 refa 就是访问 a
对于 & 引用 和 * 解引用这两操作符
将一个变量视为标签,这个标签代表 地址 和 数据的组合,& 是取得地址,* 是取得数据,并将该数据视为地址,对该地址的数据进行访问。
因此当知道一个变量的地址时,有这么一种操作。
/* 假设一个 int 型变量的地址为 0x61fdc0 */
(*(int *)(0x61fdc0)) = 10;
(*(int *)(0x61fdc0))++;
std::cout << *(int *)(0x61fdc0) << std::endl;
这样就直接通过对该 int 型变量的地址,对该变量进行访问。
(以上仅为个人对相应知识理解,可能存在有误,欢迎指出 |_0.0_| )