相当于int *p[5]和int (*p)[5].
区别是:
前者int *[],是一个指针数组,加入中括号里面是5,那么就是说你所定义的这个数组里面的5个变量都是指针。就好比你定义int a[5]类似,这5个元素都是可以存放int值的变量。int *p[5]就是定义了5个元素,每一个元素都是指针,可以指向变量。也可以写作int (*p)[5];
后者int (*)[],是一个行指针。定义了之后就可以这样用printf("%d",*(*(p+i)+j));为什么是行指针呢?就是告诉计算机我这里定义了一个指针,如果移动一下你就要给我移动一个长度为5的单位。因为二维数组在内存中不是像我们逻辑思维一样存储行行列列的,它是一下子甩开一大串存完第一行存第二行。这个行指针就是应用在那个j上面,j每每加+1实际上就是向后移动了5个单位,逻辑结构上实际就是移动了四行。
还有就是区分int (*p)(int);这是一个指向函数的指针。
温馨提示:答案为网友推荐,仅供参考