设有以下说明和定义语句,则下面表达式中值为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
第5句相当于
然后看答案
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
这里面{1,&a[1]},i不是等于1吗i++之后不是2 吗
追答ptr指向的是a[1]不是a[0]
a[1]是{2,&a[2]}
a[0]才是{1,&a[1]}