有一道C语言的选择题,希望能帮忙给出详细解答,谢谢了

设有以下说明和定义语句,则下面表达式中值为3的是()
struct s
{ inti;
struct s*i2;
};
static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]};
static struct s *ptr;
ptr=&a[1];
A.ptr->i++ B.ptr++->I C.*ptr->i D.++ptr->i

struct s
{    int i;
    struct s *i2;
};
static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]};
static struct s *ptr;
ptr=&a[1];

第5句相当于

static struct s a[3]={{1,&a[1]},{2,&a[2]},{3,&a[0]}};

然后看答案

A.ptr->i++

ptr指向a[1]然后指向属性i 此时i=2

运行完这句时候才执行i++

B.ptr++->I

结构体中没有I这个属性

C.*ptr->i

->的优先权大于*指针 所以相当于*(ptr->i)而i属性是int 不能用*指针去修饰

D.++ptr->i

->的优先权大于++所以相当于++(ptr->i)

而使用这句之前使用了i+=1

所以此时a[1]的i=3


所以正确答案是D

追问

“D.++ptr->i

->的优先权大于++所以相当于++(ptr->i)
而使用这句之前使用了i+=1
所以此时a[1]的i=3”

在哪里使用了“i+=1”?

追答

++ptr->i

相当于++(ptr->i)

意思就是使用ptr指针指向的结构体中的属性i之前 使i自增1
i++是使用后自增1,++i是使用前自增1

追问

static struct s a[3]={{1,&a[1]},{2,&a[2]},{3,&a[0]}};

这里面{1,&a[1]},i不是等于1吗i++之后不是2 吗

追答

ptr指向的是a[1]不是a[0]
a[1]是{2,&a[2]}

a[0]才是{1,&a[1]}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-11
D

A = 2
B = 2
C 估计语法应该过不到
第2个回答  2013-12-11
D.++ptr->i
相似回答