C语言是一门面向过程的编程语言,而指针这个东西 对于C语言来说又是精髓所在。在进行C语言的程序编写时,指针的合理运用会带来很好的运行效率。

    首先,说明两个符号。第一个“%p”,这个符号指输出指针地址,可以查看指针所指的地址;第二个“&”,我们在scanf语句常会用到这个符号,但是它又是什么含义呢。这里说明一下它的意义是指:取地址。所以scanf时,我们是把值赋到了该变量相应地址的内存空间内。

    关于应用场景:

            1、数据结构相关,连接内存空间,申请内存空间等等。

                 申请内存,我们会用到 malloc。但是希望各位能够在malloc申请空间后在适当的时机进行free释放掉空间。free时的地址应该是申请时的地址。如果地址改变,编译会报错。

    

            2、当指针和数组联系在一起时,我们不妨试一试。

从下图可以发现,指针的地址和数组首地址是一样的。

C语言 指针相关


    当我们需要保证数组值不发生改变时,我们就可以用指针作为形参,数组作为实参,对指针进行操作从而达到对数组进行操作。下图,在主函数内定义了数组arr,作为GetValue子函数参数传入,在子函数内通过指针实现了对数组的赋值。

C语言 指针相关


    另外,由下图可见,数组a和b明明是两个相同的,为什么a==b的值会是0?因为在做编译时,与指针相似,比较的是地址。由于两个数组地址不一样,所以自然返回值为0

    C语言 指针相关


    最后,分享一些相关的。

        1)在声明一个指针后,如果未确定其地址,禁止赋值。因为它的地址是未知的,如果指向的地址禁止读写,那么程序会崩掉。

        2)指针在做减法时,其本质是: 地址相减 / sizeof(指针类型)

        3)不同类型的指针不建议进行相互的赋值。虽然程序能够编译,但是在内存空间上会造成混乱。因为每个数据类型的sizeof是不相同的。

        4)注意 0地址 的使用。通常,这个地址是用户不可触碰的,在规定时可以用NULL代替。

        5)malloc返回的类型是void*,所以我们需要在malloc前面加上(变量类型*),强制转换一下。


如有错误,还望指正,在此谢过。

相关文章: