int **pp = p 为什么可以这样赋值?

int a[] = {0,1,2,3,4};
int * p[] = {a,a+1,a+2,a+3,a+4};
int **pp =p;

int*p[]这样写的话相当于是一个指针数组,p是一个有5个元素的数组, 每个元素是一个指向int类型的指针。
int pp相当于是一个指向int类型的指针,加一个相当于指向int类型指针的数组。
所以赋值是没问题的。
你可以看一下int*p[]中最后的每个元素的值到底是什么,就知道是怎么回事了