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*类型的指针    我们就不能修改其所指向对象的值

 

posted @ 2017-09-21 13:29  红雨520  阅读(113)  评论(0编辑  收藏  举报