c语言 *p[N], (*P)[N],及**p的区别

先明白什么是指针变量,和指针。指针其实就是存储单位的地址,指针变量是一个变量,用来存放指针(即地址);
    
int  *p[N]表示指针数组,也就是说定义了N个int型的指针变量。
    其中p[0] p[1] p[2] ...... p[N-1] 为指针变量,每个指针变量存放任意int型指针。
    p是一个二重指针,p为是指针变量p[0]的指针(就是p[0]的地址)。
    
int (*p)[N]表示定义p为一个指针变量,它指向包含N个整形元素的一维数组。
    其中(*P)[0]  (*P)[1]  ...... (*P)[N-1] 这些为一维数组的N元素。每个元素表示一个整形的变量,和int a中a表示的含义一样。
    (*p)表示的就是(*P)[0]的指针(即地址),就和int a[] 中的a含义一样。
    p为一个指针变量,存放的是(*p)的指针(地址的地址)。指针变量p存放的一个二重指针,和int **p中的p含义一样。
    
int **p 表示定义一个指向指针的指针。
    p为一个指针变量,存放的是指针的指针(地址的地址)。
 

注:*p[N] ,  (*p)[N]   它们中的p表示含义不同,一个表示的指针,一个表示的指针变量。