注册 登录
编程论坛 C++教室

一个很难的问题

lixang 发布于 2007-03-10 12:00, 449 次点击
int *p[10];//说明一个指针数组,他有10个元素,每个元素都是一个指针(指向int型)
int(*p)[10];//说明一个指针,它指向一个(装有10个int类型的)一个单元。

我仅仅知道上面的描述:(仅仅是死记住了,并没真正理解)
但是不好理解:
我想如果从
()圆括号 * 星号 []中括号
结合律的角度如果分析的话,比较好理解:
但我分析不下去:
请教各位帮忙:
5 回复
#2
zhouweike2007-03-10 16:07

看下面一个程序,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]);
}
}

#3
lixang2007-03-10 17:46
谢谢:
我还是不明白;
我想这个问题最好可能是从
()圆括号 * 星号 []中括号
结合律的角度分析
最为直观!
#4
anthony6342007-03-10 19:05

“右左法则” P最先与谁结合那么P就是什么*p[],P是各数组;(*p)[]P是个指针,更多的情况你可以看《C专家编程》那里说得很详细。

#5
boyyang48942007-03-10 22:34


int *p[4];
由于[]比*优先级高,所以p先与[4]结合,形成p[4]形式,这显然是数组形式,它有四个元素。然后再与p前面的“*”结合,“*”表示此数组是指针类型的,每个元素都是指针并且每一个指针指向int型变量。

int(*p)[4]
由于()使得“*”先与p结合形成指针,这个指针再指向int型的数组,并且该数组有四个int型元素;

#6
dlcdavid2007-03-10 23:41
int *p[10];
//可以这样写,int* p[10]
//他的元素类型是int*也就是指向int的指针
//p[10]就表明这个数组可以存放10个这个类型的元素

int(*p)[10];
//首先把*p用括弧括起来声明一个指针p
//该指针指向含有10个int型元素的数组.

[此贴子已经被作者于2007-3-10 23:43:01编辑过]

1