第1个回答 2015-09-11
struct st{
int x;
int *y;
} *pt;
int a[] = {1,2},b[] = {3,4};
struct st c[2] = {10,a,20,b};
/*
{
10,
pArray_a:{1,2}
20,
pArray_b:{3,4}
}
*/
pt = c;
A) + + pt -> x ++(pt->x) == ++((*pt).x) == ++(c[0].x), so is 10+1=11
B) pt -> x so is 10
C) *pt -> y *(pt->y) ==*((*pt).y) ,since (pt->y) point to a[0], so *(pt->y) is 1
D) (pt + +) -> x (pt++), since pt point to c[0]={10,a}, (pt++) point to c[1]={20,b}, so (pt++)->x == c[1].x, is 20
======================================
注意点,
(1)
指针的++或--操作是针对给类型的大小pt++,实际指针数值移动sizeof(struct st)
就如同若是int指针,pint++,实际移动的是sizeof(int)
而int++,就是int变量数值加1
(2)
a,b为a[],b[]数组的起始地址
实际a=&a[0],b=&b[0]
(3)最后要注意的就是(++指针)还是(++(*指针)),后者根据*对指针解封装后的数据类型而定,如(*pint)解封后就是int,对int++就是数值递加,而(++指针)是相当于数组元素的位置移动