指针数组:内容是指针的数组 char *str[3]={}; //[]优先级高于* char *(str[3])={}; // char **p=str; //指向 指针数组的指针 二维数组指针: char a[4][3]; char (*p)[3]=a; //[3]表示每一行有三个元素,p指向的类型是char[3] //就是一个指针 p+1; //前进一行 *(p+1) //表示取地址上的数据,也就是整个第 1 行数据。 //注意是一行数据,是多个数据 单独使用时表示的是第 1 行数据,放在表达式中会被转换为第 1 行数据的首地址, 也就是第 1 行第 0 个元素的地址,因为使用整行数据没有实际的含义,编译器遇到这种情况都会转换为指向该行第 0 个元素的指针; 就像一维数组的名字,在定义时或者和 sizeof、& 一起使用时才表示整个数组,出现在表达式中就会被转换为指向数组第 0 个元素的指针。 *(p+1)+1 //表示第 1 行第 1 个元素的地址 *(*(p+1)+1)