C++ 指针和引用

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_| )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值