指针理解(初级)

一.内存和地址

在进入正题之前,我们应该知道每家每户都有一个门牌号,可能你不清楚,但是这个肯定是有的,

如果需要找到你,同时你在你自己的家中,那么就可以通过你的门牌号很快的找到你。其实指针也是,只不过把内存换成了你,地址变成了你家的门牌号,初步了解后,我们进入正题

我们CPU在处理数据的时候,需要把数据放在内存中存起来,再读取,我们的电脑有18G/32G/64G,在管理数据的时候是把内存分成一个个内存单元,每个内存单元一个字节

数据在计算机中大多用二进制存储的,但是这里不是一个字节存一个二进制位,这里是一个比特位存一个二进制位,这里要提一下这些单位的关系。

1个字节(byte)等于8个比特位(bite)

1KB=1024byte

1MB=1024KB

1G=1024MB

1T=1024G

这里就是它们的关系转换。

       这里大概对内存有一定的了解了,接下来看地址的表示

地址就是数据存放的门牌号比如看到的0X00000001这类的都是内存单元的地址,在计算机中叫地址,但是在c语言中叫做指针,所以指针==地址,这里也可以说是内存单元的编号,所以也有 指针==地址==内存单元二

二.指针变量和地址

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int main()
{
    int a = 10;
    return 0;
}

 这里的 a 变量创建就是向内存申请了空间,然后把a的数据存进去,因为它是整形,所以申请的是4个字节,每个字节都有一个地址,看图

可以看出 这里的0a也就是十六进制里面的十,因为是4字节所以,后面用00填补,看到这里,你应该很清楚的看到了数据的存放

地址的产生也需要存放,那又是那呢,这就是放在我们指针变量里了

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	int* p = &a;
	return 0;
}

 这里我们用到&解引用操作符,,把a的地址放到指针变量p里面去,这也就是为什么指针被称为地址,这种变量就是用来存放地址的。

为了更好理解,我们对int *p=&a进行拆解,这句的意思就是把a的地址放到p中去,不能理解为放在*p中,int*是一直类型,和int,char,short,这些类型一样,*p的意思是解引用操作,也就是通过p找到a这个值,相当于*是一个密码,把p解开了,你就找到了a,可以这样形象的去理解

其实我们如果对这个不了解,很容易在写代码的时候放错,比如用指针接收一个数组地址的时候,想着移动指针读取下一个数据,很容易写成*p++这样就错了,其实很简单的理解就是*p=具体的数据,p只是存放具体数据的地址而已,这里应该用p++,但是如果理解了上面的,就不容易忘记弄错了。

 三.指针变量类型及其意义

这点我认为是很细节的一点

首先,指针变量类型不止有int*,还有char*,short*,double*,他们的大小都是相等的,在32位都是4个字节,在64位都是8个字节,因为指针变量都是4字节或者8字节这里要重点理解的是他们都是一个类型,所以大小相等从图中也可很清楚的看到他们的大小,所以不要弄混了,不,你一定不会弄混

说完他们的类型,那我们应该想既然大小都一样,那为什么要这么设置呢,这就要说到他们的意义所在了

 我们在运用指针的时候,比如int a[10],如果我们存放的数都是整数,那么我在用char类型指针进行操作就会很麻烦,因为它是一个字节一个字节移动,所以我们想得到下一个整数,就很不方便,但是如果我们用int类型指针,那么这个操作就会简单很多。

四.总结 

到这里也差不多对指针有了初步的了解,这只是初级,后面还会有高级的指针详解,还希望大觉多多指正。

  • 41
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值