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

    指针   这东西对于初学者来说     指针通常是比较难以理解的    

    在使用指针的时候   有时产生的调式问题连富有经验的程序员都觉得头疼

    然而   指针不管是在C语言  还是 C++中   指针都是一个非常重要的组成部分

    具体来说    指针保存的是另一个对象的地址

    上图中    第二条语句定义了一个指向string类型的指针str    并初始化str  使其指向string类型对象s

    *str中的*操作符表明str是一个指针变量   &s中的&符号是取地址操作符

    当此操作符用于一个对象上时  返回的是该对象的存储地址

    所以在后面的输出中    str的值是在计算机中的存储地址   *str输出的是str指针所指向的string类型变量s的值

    注意:虽然在C/C++中  指针是一个非常重要的部分   但是在平常的编程中   建议尽量避免使用指针与数组

    指针和数组容易产生不可预料的错误     其中一部分是概念上的问题    指针用于低级操作    

    容易产生于繁琐细节相关的错误   其他的错误源于使用指针的语法规则      

    我们在C++中  可以使用vector类型来代替一般的数组   string类型可以取代C中间的字符串数组

    指针变量的定义

        int *it;
        string *st;
        double *db;
        vector<T> *v;

    在这里   有一点需要说明   指针变量定义的时候    *符号的位置   本身是没有要求的    以下的写法都是可以得

          int *it;     int* ti;       int*tt;
          string *st;  string* ts;    string*ss;

    不过有一点    上面的写法都是可以得    不过在程序中   *符号视为和你后面定义的指针变量名是一起的

    所以如果你要同时声明俩个同类型的指针变量     

        string *p1,p2;//这样编写的话   只有p1是指针变量  p2只是一个string类型的变量
        string *p1,*p2;//这才是同时声明俩个指针变量的正确声明

    指针可能的取值有以下三种情况

        string s("hello");
        int *p1=0; int *p=NULL;//指针变量不指向任何东西   为空NULL
        string *str = &s;//指针变量指向string类型对象s   也可以使用另一个指针变量赋值
        double *db;//   没有初始化   

    在平常的使用中   我们要避免使用没有初始化的指针    因为没有初始化的指针  通常会导致程序崩溃

    如果可以的话    除非所指向的对象已经存在    不然不要先定义指针  这样可以避免定义一个没有初始化的指针

    如果一定要先定义指针变量  再定义对象的话    我们应该在指针变量声明之时   将指针初始化为0

    另外还有俩种特殊的指针void*指针与   const*指针

    void*类型的指针  可以指向除了const*类型的指针变量外的所有指针变量

    const类型的变量  不能够使用非const*类型的指针     

    非const类型的变量   可以使用const*类型的指针  

    不过只要是使用了const*类型的指针    我们就不能修改其所指向对象的值

  • 相关阅读:
    C# 操作XML
    js把字符串(yyyymmdd)格式转换成日期格式(yyyy-mm-dd)
    解析GZIP压缩的网页
    访问修饰符
    c# 多态中 Virtual与override的作用
    C# 中 ref 和out 的区别
    C# .net 中文手册地址
    js获取URL参数
    几种Css前端框架资料
    android 检查能否上网
  • 原文地址:https://www.cnblogs.com/52why/p/7568136.html
Copyright © 2011-2022 走看看