第四章 数组和指针

  数组:首先数组的初始化不允许直接复制和赋值,数组的元素的类型是size_t类型,可以通过for(size_t ix=0;ix!=array_size;++ix)。

  指针:指针的定义: int *P;注意:在使用指针之前必须要初始化指针。并且对指针初始化的值应该使用如下四种值:1、0值常量表达式。例如和疑惑的0值得const对象和字面值常量0。2、类型匹配的对象的地址。3、另一个对象之后的下一地址。4、同类型的另一个有效指针。

  听人家说指针的操作是最难的,但我对指针的理解就是如果要用到指针的话,首先你要必须要明确地知道对应的是变量地址还是变量值。比如如果有一个容器vector,那么你必须要清楚这个容器中存放的是地址还是变量值,明确了这一点之后,如果想要知道这个容器里面到底是个什么东西就可以通过指针来获取,如果容器里面存放的是地址,那么你要知道这个地址对应的变量是什么通过**iter来获取,如果存放的就是变量值,那么只要通过*iter就可以获取。换句话说要明白*p和P的区别:*P指的是对应的变量值,P则是对应的存放变量的地址。

  指针(*P)和引用(&p)的比较:引用是引用对象的值,如果修改了引用的值,相应的对象的值也随之改变。而指针式指向对象的地址,如果改变了指针只是改变了它指向的对象而已。原来的对象并不会改变。(说到这里其实我们经常说的指针就是p而不是*p(它是指针变量的值),只是在定义的时候定义了 int *P而已。你如果修改指针就是修改p,而不是*p。个人理解不知道是不是有误?)

  跟指针联系在一起的主要是new和delete的操作:这两个操作是C++相对于C来讲新增加的内容。具体的实现通过一个列子来说明:int *p=new int[10];这是定义一个int数组。并且返回一个指向数组第一个元素的指针p(就是上面所讲的第一个元素相应的地址)。还可以定义单个的对象如:int *p=new int;并且返回一个int型对象的指针p。在这里定义单个对象的时候有一个初始化的问题。也就是说可以定义的时候初始化,如:int *p=new int(10);(注意这里的初始化是圆括号而不是方括号,方括号表示数组)。那么建立了一个动态数组,如何来操作这个数组呢? 如:int *p=new int[n];for(int* q=p;q!=p+n;++q)。最后就是释放内存:利用delete来释放。释放数组:delete [] p;中间的[]必不可少。释放单个对象:delete p。

原文地址:https://www.cnblogs.com/ljy2013/p/3242149.html