*p[]=*p([]),首先,它是一个数组,数组里面保存的是指针
(*p)[]则不同,首先它是一个指针,然后,它指向一个数组,但通常,再定义的时候需要指定所指向数组的大小。
示例:
#include
int main(int argc, char *argv)
{
char a[10]="test";
char *(p[])={"hello","world!"};//char指针数组,两个元素,分别指向hello和world
printf("%s\n%s\n",p[0],p[1]);//分别输出两个元素
char (*p2)[10]=&a;//指向数组的指针,所指向的数组有10个char元素
printf("%s\n",p2);
return 0;
}
[ ]是变址运算符,p[ ]即计算p的地址并找出此地址单元中的值。如果此地址单元里存放的是另一个单元的地址,就可以用指针运算符来找出该单元的值。
你的疑问恐怕是出在二维数组里吧
例如:int a[3][5],*p;
p=a;
上面的第一行表示定义一个指针变量p,下面一行表示p指向数组a的首行
a+1表示下一行首地址
*p等价于*(p+0)等价于p[0] 表示p[0]行首地址
p[0]+1表示p[0][1]的地址 p[0]+2表示p[0][2]的地址
而*(p[0]+2)表示p[0][2]这个元素的值
p[]是一维数组,p[][]是二维数组
*p 是一维数组参数,*p[]是二位数组参数,
*p[ ]=**p=p[][]