总结
对于指针数组的理解:
按照字面意思,首先是指针,其次是数组,就表明这是一个数组,不过数组里面存储的指针。
```
    // 使用指针数组
    int **ptr = new int*[4];
    for(int i = 0; i < 4; ++i)
    {
        *(ptr+i) = new int [3];
    }
```
如代码所示:new  int * [4],表明这是一个数组,数组里面存储的是 int *类型的指针。
而等号左值 int ** ptr,首先要看(int *)*ptr ,表明这一个指针,其指向了int *类型的变量。  
在看for循环内的内容,这是对数组内指针进行初始化,将数组内的每个指针指向了一个int[3]的数组,
当然这里int [3],也可以改为int[4]等,当然也可以为数组内,每个指针,分别制定不等长的数组。
对于数组指针的理解:
    
    
    
参照一位数组指针的定义
```
int * a = new int [3];
```
和
```    
// 使用数组指针
    int (*p)[3] = new int [4][3];
    printf("数组指针:\np:\t%d\n&p[0]:\t%d\n*p:\t%d\np[0]:\t%d\n&p[0][0]:%d\n\n"
        ,p,&p[0],*p,p[0],&p[0][0]);
```
等号右值,都是数组,等号左值依然是int *p ,不过因为其实二维数组,所以
在其后,增加了指示二维的[3],以表明,其第二维的维度为3
问题:
对于下面的代码:
```
class myString;
myString *pStringArray = new myString[13];
```
以下两种delete有什么区别?
```
delete pStringArray;
delete []pStringArray;
```
方括号的存在会使编译器获取数组大小(size)然后析构函数再被依次应用在每个元素上,一共size次。否则,只有一个元素被析构。 
博客原文:
http://blog.csdn.net/xietingcandice/article/details/41545119
```
//============================================================================
// Name        : TS.cpp
// Author      : jiudianren
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <functional>
#include <stdlib.h>
#include <vector>
#include <stdio.h>
using namespace std;
int main()
{
    int * a = new int [3];
    printf("一维数组:\na:\t%d\n*a:\t%d\n&a[0]:\t%d\n\n"
        ,a,*a,&a[0]);
    // 使用指针数组
    int **ptr = new int*[4];
    for(int i = 0; i < 4; ++i)
    {
        *(ptr+i) = new int [3];
    }
    printf("指针数组一步步申请:\nptr:\t%d\n&ptr[0]:%d\n*ptr:\t%d\nptr[0]:\t%d\n&ptr[0][0]:%d\n\n"
        ,ptr,&ptr[0],*ptr,ptr[0],&ptr[0][0]);
    // 使用数组指针
    int (*p)[3] = new int [4][3];
    printf("数组指针:\np:\t%d\n&p[0]:\t%d\n*p:\t%d\np[0]:\t%d\n&p[0][0]:%d\n\n"
        ,p,&p[0],*p,p[0],&p[0][0]);
    // 释放内存
    for(int i = 0; i < 4; ++i)
    {
        delete [] ptr[i]; //注意不要漏掉方括号
    }
    delete []ptr;
    delete []p;
    delete []a;
    return 0;
}
```
输出
```
一维数组:
a:	3615416
*a:	3615824
&a[0]:	3615416
指针数组一步步申请:
ptr:	3615440
&ptr[0]:3615440
*ptr:	3615464
ptr[0]:	3615464
&ptr[0][0]:3615464
数组指针:
p:	3615560
&p[0]:	3615560
*p:	3615560
p[0]:	3615560
&p[0][0]:3615560
```
原文:http://www.cnblogs.com/jiudianren/p/5672047.html