C语言--指针--程序员如何在较短时间内获得第一桶金

本篇文章文字篇幅较大, 还是希望能耐心看完. 不过, 学习不就是这样嘛, 要奶得住寂寞,虽然不一定变强, 但一定变老. 


目录

       初识地址

       初识指针

       指针的工作原理

       野指针

       二阶指针



       初识地址

        在计算机的存储空间中,  存储数据是以字节为单位, 每个字节都有自己的编号, 在32位平台下,这种编号的长度占32个bit位 (在64位平台下,长度就占64个bit位), 当我们需要找到这些字节的时候, 这些编号就作为地址存储到变量中, 顺着这种变量, 就可以找到要找的字节,  这种变量呢, 我们称它为指针     


       初识指针

        好! 经过上一段文字,我们已经知道: 将那些字节的编号作为地址存放到变量中, 这个变量就是指针,  那就再深入的想想, 指针存放的是长达32个bit位的地址, 那就说明指针的长度就是4个字节, 当系统是64位时, 那指针就是8个字节. 

        总结, 我们发现指针的大小是由系统决定的, 并且一次只能指向一个字节.


       指针的工作原理

        可以说每个类型都有其对应的指针, 在这里, 我们拿 整形int 字符型char 来看一下指针到底是如何工作的. 

        int类型变量占4个字节, 对应的指针类型为 int *    ,char类型变量占1个字节, 对应的指针类型为: char *  

                int a = 5;                                                                                                                           

                char b = A;

                int *pa = &a;

                int *pb = &b;

        在这里 指针 pa 指向的是 变量a的第一个字节, 但是指针pa的类型: 整形指针 决定了: 如果指针pa要访问变量a中的内容, 就需要继续访问紧接着的3个字节.,如此才算是完整的访问了一个整型变量.

        指针pb 指向的是 变量b的第1个字节, 而变量b又只有1个字节, 所以 指针pb的类型: 字符型指针 决定了: 如果指针pb要访问变量b中的内容, 只用访问当前指向的指针.

        总结: 指针的类型对指针非常重要, 决定了对指针解引用的时候需要操作几个字节. 同样在不同类型的数组中, 指针向前或向后访问的步长也由指针决定.


       野指针

        概念: 野指针就是指针指向的位置是不可知的( 随机的, 不正确的, 不明确的 )

        野指针的成因

                1, 指针使用前未初始化;

                        使用前不初始化, 默认为随机值. 

                2, 指针越界访问; 

                        当指针的指向超出已知的范围, 该指针就是野指针. 

                3, 指针指向的空间被释放; 

        规避野指针:

                1, 指针初始化

                2, 小心指针越界

                3, 指针指向空间释放, 及时置NULL

                4, 避免返回局部变量的地址

                        当函数调用结束后返回, 函数的栈帧空间被释放, 如果返回的是函数内部的局部变量, 会因为函数栈帧的空间被释放, 导致指针指向未知. 所以要避免返回局部变量的地址.

                5, 指针使用之前检查有效性


       二阶指针

        了解指针的原理后, 二阶指针就很容易理解了. 二阶指针就是指向指针的指针, 

                int * p = NULL;

                int **pp = &p ;

        二阶指针pp 的类型为 int**, &p的类型为 int** ;     p的类型为 int * ; 指针pp也是指向指针p的第一个字节, 指针pp的类型决定了 其解引用时,操作4个字节,  向前或向后访问的时候的步长也是4个字节. 


        我是专注学习的章鱼哥~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值