如何给这些指针赋值 麻烦了谢谢

一个指针的声明为int * p;int 是类型, * 代表这是一个指针, p是指针的名字也代表其首地址;

比如int ** pp, 可以理解为 int (*) *p,这是一个指针,指向一个存放着int *的地址;
比如int (*p1) [3][4],可以理解为(int[4] )(*p1)[3] ,简化为type (*p1)[3],这是一个长度为3数组,内部存放的是一级指针,指针类型为int[4]。

int (**p2[3])[4]: type = int [4]  => type (*)*p2[3],这是一个指针,指向长度为3,存放指向类型为int[4]的地址的数组;

int *(*p3[3])[4]: type = int  [4] => type (*) (*p3)[3],这是一个指针,指向一个长度为3,存放指向类型为int[3]的指针的数组;

int **pp:int (*) *pp,这是一个指针,指向存放int *的地址;

int **(**p4)[3][4]: type = int [4] => type (*)*(**p4)[3],这是一个指针,存放指向(一个存放着指向长度为3,类型为int[4]的二级指针的数组)的指针

a 是什么类型?  你自己可以在 IDE 里面实验

这个是原题  那个是我自己刚写的定义的一个一位数组a  

刚学指针

int main()
{
    int a1[3][4];
    int (*p1)[3][4] = &a1;
    int a2[4];
    int (*t2)[4] = &a2;
    int (**p2[3])[4]={&t2};
    int *a3[4];
    int *(*p3[4])[4] = {&a3};
    int *ap = 0;
    int **pp = ≈
    int **a4[3][4];
    int **(*t4)[3][4]=&a4;
    int **(**p4)[3][4]=&t4;
    int **a5[4];
    int **(*t5)[4] = &a5;
    int **(**p5[3])[4] = {&t5};
    int **a6[4][3];
    int **(*t6)[4][3];
    int **(**p6[3][4])[4][3] = {&t6};
}

编译没问题。

三克油