zoukankan      html  css  js  c++  java
  • C++之指针

    C++中指针是一个很让人头疼的东西,指针指向这儿指向那儿很容易把人搞晕了。指针实现了对象的间接访问,指针本身也是对象这点和引用不同,引用仅仅是对象的别名。指针可以在其生命周期内指向不同的对象(当然除了指针常量),另外指针无需在定义时赋值,指针也可以为空指针或者无效指针。

    常用的定义方法如下:

    int a=10;
    
    Int *b=&a;//运用取地址运算符
    

    注意:引用不是对象,没有实际的地址,所以没有指向引用的指针!

    指针的值类型:

    1.指向了一个对象;

    2.指向紧邻对象所占空间的下一个位置;

    3.空指针;

    4.无效指针;(不能对无效指针操作,后果无法预计)

     

    利用指针访问对象就是使用解引用运算符“*”,要注意的是解引用操作只能用于已经指向某个对象的指针

    空指针的产生方法:

     

    int* p1=nullptr;
    
    int* p2=0;
    
    int* p3=NULL;//包含头文件cstdlib
    

    注意:在使用指针的时候最好要进行初始化!使用指针前要进行非空判断!

     

      对于指针的赋值中,难以区分的是指针的指向改变了,还是指针指向的对象改变了,很简单的方法就是看“=”的左边是指针还是其指向的对象,简单点可以看其有没有用解引用运算符“*”。对于两个指针可以使用==和!=运算符来判断是否指向了同一个对象,另外指针还可以进行“-”操作,当然在数组中才有意义,减操作能够获取到两个对象之间索引的间隔,对两个指针“+”、“*”、“/”的操作时没有意义的。另外非空指针强制类型转换布尔型为true。

       关于void*指针,该指针可以存放任何对象的地址,但是不能直接使用void* 指针,在使用void*之前必须要进行强制类型转换已确定其指向的对象类型,才能进行相关的操作,简单来说void*指针仅仅代表内存空间,对其内存中存放的对象类型根本不知道。

     

    指针和数组名的区别:

      我们在使用数组的时候经常使用数组名来操作,且数组名代表了数组的首地址,感觉和指针的使用差不多,但其实数组名更包含的该数组的内存信息,指针仅仅是存放了一个地址。但需要注意的是,如果函数需要传入数组来进行操作的化,不能只传入数组名,因为编译器会将其退化成一个指针,所以在需要对数组操作的时候,形参必须要包含数组首地址以及数组长度信息。

     

    以上是目前对于C++中指针的总结,后续会继续补充!

  • 相关阅读:
    js判断是移动端还是PC端
    如何删除mysql注释
    Javascript库的产生和解读
    zeptojs库解读3之ajax模块
    zeptojs库解读2之事件模块
    zeptojs库解读1之整体框架
    发起图片请求的几种可能性(webkit内核)
    让zend studio 支持 redis函数自动提示
    4种常见的MySQL日志类型
    redis 安装
  • 原文地址:https://www.cnblogs.com/chmm/p/7420514.html
Copyright © 2011-2022 走看看