第1个回答 2012-08-09
.1: *p[2]是指针数组,实质是一个数组,里面的两个元素都是指针
(*p)[2] 是指向一维数组(含两个元素)的指针变量
[]的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量
2: ++与 ->的优先级相同他们是左结合的 意思就是从左往右运算。++p->x和(++p)->x是一样的因为都是从左往右运算。
对于像这样的类似的表达式你应该要看看c语言的优先级表,希望回答对你有所帮助,祝你好运!
第2个回答 2012-08-09
ha[3][2]十一个2维数组,就好像一个表格,一共有3行,每行两个数据。如下
01 02
11 12
21 23
*p[2]是先算p[2],选中第2行,再算*(p[2]),选中第2行第1个元素。即11
(*p)[2]是先算*p,选中第一行,再算(*p)[2],选中第1行第2个元素。即02
第二个问题无法回答,
->操作符只是在访问结构体或对象成员的时候用。
数组是用不到这个操作符的。
第3个回答 2012-08-09
其实这些只要你知道了操作符的优先级顺序就很号理解了,对于上面的两个问题中涉及的操作符有着样的优先级顺序:()大于 [] 大于 -> 大于 ++ 大于 *,因此:
1.int *p[2]:首先p是个数组(先与[]结合),再由int*说明这个数组的元素为int指针,这是一个整型指针数组;
int (*p)[2]:首先p是个指针,类型为int*,指向一个整型的一维数组,即数组的指针;
2.++p -> x,即是++(p->x),先取p的x成员,再++
(++p)->x是先把p++,后再去取x成员