2021-03-01 指针变量 简

指针变量

计算机把数据都存在内存中,但是如果要读取内存的话,肯定是有他们寻找目的内存的方式。

就像我们要找一个人,如果知道他家的地址,就可以找到他在哪,而内存也是有地址的。

那计算机时如何告诉寄存器地址的呢,这时候就要引出地址线这个东西。

举一个32位的电脑为例,32位指的是它有32根地址线,电线传输信息的方式就是用高低电平,即两种输出结果。

那么32根地址线最多可以输出2^32种结果,也就是说有这么多的地址个数,但是它很多么。

假设我们给每个bit分配一个地址,那么最多可以给多少内存分配空间呢

答案是2^32 / 8 /1024 /1024 / 1024 =0.5G

这对于我们来说有点太少了,那干脆再上一层,给每个byte分配一个地址,那可以分配0.5 * 8 =4G 这么多的内存。

这也是为什么32位的电脑最多只能装 4G内存的原因。

地址也是数据,那地址也可以作为变量给存起来,这种变量叫做指针变量/

前面说过了 一个地址由32个地址线的输出结果表示,所以一个指针变量的大小位 4byte(在32位电脑上)。

说完了指针变量是什么,接下来就要说它怎么创建了。

int main()
{
	int a =10;
	int* p = &a ;   //创建指针变量
	printf("%p\n", &a);
	printf("%p\n", p);
	*p = 1;     //用指针变量对地址里的数据进行更改
	return 0;
}

创建的指针变量是有自己的名称的,类似于你家叫什么什么的,然后是需要在数据类型之后加一个*,告诉计算机我要创建变量的类型是指针变量,而后右端不能忘了加一个 & 取地址符 ,你要告诉计算机,要的是这个东西还是这个东西的地址。

后面两行打印是想表现 创建的指针变量p 与 a的地址没有多大的差别。
不过如果是想通过指针变量对所在地址的数据进行操作的话,我们还需要解引用操作符/间接引用操作符———*

如上面的代码块, *p = 1 其实与 a =1的操作无异

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值