题目是这样的:
struct st
{
int n;
struct st *next;
}
static struct st a[3]={5,&a[1],7,&a[2],9,' \0 '},*p;
则下列表达试的值是6的是:A、p++—>n;B、p—>n++;C、(*p).n++;D、++P—>n
该选什么?为什么要选着项?“ a[3]={5,&a[1],7,&a[2],9,' \0 '”是什么意思,数组中的指针该怎么算,怎么理解。请各问大哥指点。再这里谢了。
static struct st a[3]={5,&a[1],7,&a[2],9,' \0 '},*p;
则下列表达试的值是6的是:A、p++—>n;B、p—>n++;C、(*p).n++;D、++P—>n
该选什么?为什么要选着项?“ a[3]={5,&a[1],7,&a[2],9,' \0 '”是什么意思,数组中的指针该怎么算,怎么理解。请各问大哥指点。再这里谢了。
题外话:这里 static struct st a[3]={5,&a[1],7,&a[2],9,' \0 '},*p; 是结构对象化并赋值 而在C++语法中,对象化的时候不需要再加struct,而只需要在声明时加。
static struct st a[3] 静态定义了一个结构数组,这个数组有三个对象,每个对象有两个成员, 以上是概念。然后{5,&a[1],7,&a[2],9,' \0 '} 用逗号隔开分别对三个对象得每个成员赋值, 例如,a[0].n = 5 a[0].next = &a[1] a[1].n = 7 a[1].next = &a[2] a[2].n = 9 a[2].next = '\0' (结束符)
同时由于定义一个指针p指向a(即&a[0]),下面来分析选项:
A、p++—>n; 取p->n = 5,再对p的地址移位,此时取得值为5,p指向a[0].next = &a[1] B、p—>n++; 取p->n = 5,令a[0].n加1,此时n = 6,但取出来是的值是5 C、(*p).n++; 其实p->n等价于(*p).n,而操作原理同B, D、++p—>n 这里省略了(),即++(p->n),其实这里是取p->n先对其加1在得出值
我一开始犯错误是以为D的操作是先对p移位,再指向n,此时就指向了a[1].n,这样想忽略了优先级!
[此贴子已经被作者于2004-07-26 13:54:57编辑过]