个人关于指针的理解

指针是什么?如何理解指针?

因为指针是抽象的,所以这里我把它拟物化,这样解释也许跟容易懂。

指针的专业解释是:指针是内存单元的编号。

说明:以下的黑方框都代表一个字节

1)对于内存。

      我们一般认为内存的基本单位是字节,内存空间由很多字节组成的。

      内存可以存储数据,所以我们把每个字节当做是一个“箱子”。

       数据存入内存就好比在箱子里面放数据

      


        但是,C语言中各个类型在内存中占得字节数是不一样的。

     比如char型,只要一个字节就够了,所以一个字符只需一个“箱子”。

     而int型需要4(一般是4个字节)个“箱子”才放得下。

     double型则需要8个“箱子”。


2)编号。

     内存中每一个字节都有一个编号(是一个用16进制表示的值),这就是指针(或者说地址)。

     这就好比仓库,为了方便管理货物,为箱子都编了号。

    

3)数的存储。

     int a=100;

     内存中的状态:

     

    定义a=100,a占4个字节,也就是有4个指针,那么,哪个指针才是指向a的呢?

    当一个数据占2个及以上字节的内存空间时,把第一个字节的地址当做他的指针。

    也就是说,这里的0022FEE0才是a的指针。


4)数组与指针。

   我们知道,数组的元素在内存中是连续储存的。

   int arr[3]={1,2,3};

   内存中的状态:

   

     ①a[0]的(指针)地址是:0022FEE0

         a[1]的(指针)地址是:0022FEE4

         a[2]的(指针)地址是:0022FEE8


     ②数组名也是一个指针,它的值是第一个元素的地址

        即:arr == &a[0]

        值得注意的是:数组名是一个指针常量,也就是说他的值是不能改变的。

        比如 arr++ ,arr - -等试图改变arr的值的做法都是不合法的

    ③arr是第一个元素的地址,arr+1是第二个元素的地址,arr+2是第三个元素的地址。。。

       有人会问:第二个元素个第三个元素的地址难道不应该是arr+4和arr+8吗?

       注意:数组中arr+n指的是arr指向的元素的后面第n个元素的地址。

       实质上来说,应该是:arr+k*n  。因为我们开始定义数组为int型,所以编译器自动取K的值为4。

       k是一个由编译器根据数组类型自动确定的值。

      也就是说,arr[1]的地址是:arr+4*1         arr[2]的地址是:arr+4*2

       仅作了解,我们在写代码时万万不能按照这个思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值