指针
始终记住arr[i]等于*(arr + i);
void指针
c允许把一个类型指针赋给void指针,但c++不行
int* p1;
void* p2;
p2 = p1;
双指针
char **p; //二级指针,指向一个char *型的变量(即字符指针)。
#include <iostream>///动态分配存储空间
using namespace std;

int main()
{
        int i,m,n;
        cout<<"Input the m & n:";
        cin>>m>>n;
        //申请 为 a[m][n]
        int **a;
        a=new int *[m];
        for(i=0;i<m;i++)
        {
                a[i]=new int[n];
        }
        //释放
        for(i=0;i<m;i++)
        {
                delete []a[i];
        }
        delete []a;
        return 0;
}

指针数组
char (*p)[4]; //和二级指针差不多吧,指向带有四个元素的char 型数组的,不过它与char **的区别在于,它的计算(比如指针自增)时定量的,也就是多了个 数组元素是4的信息。
分配空间和delete
p = new char[5][4];
delete []p;
指针数组
char *p[4]; //指针数组,p不是指针, 是个数组名。不过这个数组的元素char*型的,也就是字符指针。
说明
如下
char **p;
char (*q)[4];
char a[4][4];
q = a//正确
p = a//不兼容指针类型转换,警告
如果进行计算,比如输出p[1][0],其实就是*(*(p + 1) + 0),编译器就不知道p + 1实际该加多少,
然而用q的话就知道实际是地址加4个char的大小
#include <algorithm>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <set>
#include <sstream>
#include <string>
#include <queue>
#include <vector>

void display()
{
        int** p;
        int (*q)[4];
        int a[5][4];
        int sum = 0;
        for(int i = 0; i < 5; i++) {
                for(int j = 0; j < 4; j++) {
                        sum = i + j + sum;
                        a[i][j] = sum ;
                        std::cout << a[i][j] << "    ";
                }
                std::cout << std::endl;
        }
        q = a;
        std::cout << **(q + 2) << std::endl;
        std::cout << **(++q) << std::endl;
        std::cout << *a[4] << std::endl;
}
void show()/// 空间分配和释放
{
        char (*p)[4];
        p = new char[3][4];
        strcpy(*p, "hyn");
        std::cout << *p << std::endl;
        delete []p;
}

int main(int argc, char * argv[])
{
        char** p;
        char (*q)[4];
        char a[5][4] = {"hig", "abc", "der", "sdf", "plm"};
        q = a;
        std::cout << *(q + 1) + 1 << std::endl;
        std::cout << a[1] << std::endl;
        display();
        show();
}