先看2个符号:*p[4],(*p)[4]:
这是两个不同的符号,因为[]的优先级高于*,所以*p[4]=*(p[4]),它代表指针数组,在main函数的原型中可以找打char *argv[],这也是一个指针数组。
(*p)[4]代表的是指向一维数组的指针,在函数中,可以作为参数,参看下面的代码:
- #include <stdio.h>
- void main()
- {
- int a[4];
- int i;
- void write(int (*p)[4]);
- write(&a);
- for(i=0;i<4;i++)
- {
- printf("%d/n",a[i]);
- }
- printf("%d/n",&a);
- printf("%d/n",a);
- }
- void write(int (*p)[4])
- {
- (*p)[0]=4;
- (*p)[1]=7;
- (*p)[2]=3;
- (*p)[3]=5;
- }
在这个程序中,是将数组a的地址传递给形参指向一维数组的指针p,在程序中,做了一个验证,a,&a,都能代表数组的地址值,但是write(&a);中,如果写成write(a)的话,则会出现警告。所以要是将一个数组传递给指向一维数组的指针,采取取地址的方式。
总结起来:一个数组能够传递的形参有:
int *p:可以将一个数组传给单个指针;
int p[ ]:也可以将数组传给这样的形参;
int (*p)[ ]:指向一维数组的指针。