关于我对指针初阶概念的一些理解

指针即地址

    每个字节都有一个地址,一个最小的单位就是字节

    共有2的32次方个地址,每个地址对应一个字节   

为什么最小单位不是位(bit)呢? 

我个人理解为: 

     如果每个位都占一个地址的话,那内存一下子就满了!   (地址数量有限)

   (比如一个整型数字占4个字节,用位的话要分配32个地址...容易造成浪费)

 32位上,每8位为1个字节,共4个字节,每4位(bit)组成一个16进制数,所以地址用16进制时呈现8位  (每2位为1个字节)        如:11111111 11111111 11001100 10101011  ==>  ff ff cc ab

  所以指针大小为4个字节(即有32位),取地址时呈现出第1个字节的地址      

 64位上,每8位为1个字节,共8个字节,每4位(bit)组成一个16进制数,所以地址用16进制时呈现16位  (每2位为1个字节)      如:11111111 11111111 11001100 10101011 11111111 11001100 10101011  10101011 ==>  ff ff cc ab ff cc ab ab

  所以指针大小为8个字节(即有64位),取地址时呈现出第1个字节的地址  

指针的定义和使用  

1.定义指针

    int a = 10;

    int * p;                         //基类型/数据类型*指针变量名

                                       //p的意思是point,也可以自定义其他字符表示

                                       //p是一个指针变量,*p表示p指向的对象

    p = &a;                        //让指针记录变量a的地址

                                       //此行也可以和上面那行代码合起来一起写成:int* p = &a;

    cout << "a的地址为:" << &a << endl;

    cout << "指针p为:" << p << endl;      //这两行打印输出的结果是一样的

2.使用指针

    可以通过解引用的方式来找到指针指向的内存

    指针前加*代表解引用,找到指针指向的内存中的数据

    *p = 1000;

    cout << "a =" << a << endl;

    cout << "*p =" << *p << endl;              //这两行打印输出的结果也是一样的

指针的作用

1.可以通过指针间接访问内存

     内存编号是从0开始记录的,一般用十六进制数字表示

     如果要用十进制查看其编号,则在前面用 (int) 转换  

 2.可以利用指针变量保存地址

指针一些值得注意的点

1.指针也是一种数据类型,根据所指的对象的类型可分为:

      整型指针  int*,    字符型指针  char*,   数组指针  int * [ ]

2.无论指针指向哪种数据类型,指针所占的字节空间都是4/8个(32位/64位)

3.指针类型决定了:指针解引用时权限的大小

      如int*解引用后,访问权限有4个字节,char*则只有1个字节

      指针自加时,int*向后移4个字节,char*向后移1个字节

4.指针相加没有意义(两个地址,内存空间不同也无关联,相加无意义)

   指针相减得到之间的元素个数(通常在数组里会用到该方面的知识,如数组array+5减去array+3,得到中间的元素个数为2,其中array是数组名,表示数组首元素的地址)

指针   与    内存 地址 数据 解引用    之间的关系

    (我打个比方可能比较容易理解~)

    内存是房子,地址是门牌号,数据是房子里的物品

    地址 和 指针, 是同一个东西,都相当于门牌号

    解引用类似于开锁,指针p只是指向地址,*p则开锁,可以访问内存(走进屋子)获得数据(拿到物品)

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值