一个很难的问题
int *p[10];//说明一个指针数组,他有10个元素,每个元素都是一个指针(指向int型)int(*p)[10];//说明一个指针,它指向一个(装有10个int类型的)一个单元。
我仅仅知道上面的描述:(仅仅是死记住了,并没真正理解)
但是不好理解:
我想如果从
()圆括号 * 星号 []中括号
结合律的角度如果分析的话,比较好理解:
但我分析不下去:
请教各位帮忙:
看下面一个程序,a为常指针,把p当成一个指向指针的指针就行了.
运行一下这个你就会明白了
# include <stdio.h>
void main ( )
{ int a[10]={7,8,6,5,4,32};
int (*p)[10];
int i;
p=&a;
for(i=0;i<10;i++)
{ printf("a[%d]=%d\n",i,a[i]);
printf("(*p)[%d]=%d\n",i,(*p)[i]);
}
}
“右左法则” P最先与谁结合那么P就是什么*p[],P是各数组;(*p)[]P是个指针,更多的情况你可以看《C专家编程》那里说得很详细。
int *p[4];
由于[]比*优先级高,所以p先与[4]结合,形成p[4]形式,这显然是数组形式,它有四个元素。然后再与p前面的“*”结合,“*”表示此数组是指针类型的,每个元素都是指针并且每一个指针指向int型变量。
int(*p)[4]
由于()使得“*”先与p结合形成指针,这个指针再指向int型的数组,并且该数组有四个int型元素;
[此贴子已经被作者于2007-3-10 23:43:01编辑过]