20分求大神帮忙分析一个C语言选择题
不光想知道问什么选D(参考答案),求分析一下每一个选项都代表什么意思。谢谢了。题目如下structst{intn;structst*next;};structsta[3]...
不光想知道问什么选D(参考答案),求分析一下每一个选项都代表什么意思。谢谢了。题目如下
struct st
{
int n;
struct st *next;
};
struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p
p=&a[0];
则一下表达式的值为6的是()
A.p++->n B.p->n++ C.(*P).n++ D.++p->n 展开
struct st
{
int n;
struct st *next;
};
struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p
p=&a[0];
则一下表达式的值为6的是()
A.p++->n B.p->n++ C.(*P).n++ D.++p->n 展开
展开全部
A:表达式值为5,然后p = &a[1];
B:先执行p->n,值为5,++ 是后缀式,所以表达式的值依然是5;
C:和B答案一样,表达式的值是5;
D:->的优先级高,所以先执行p->n,值为5,但是自增操作++ 为前缀式,所以先执行加1操作,表达式值为6;
故答案选D
B:先执行p->n,值为5,++ 是后缀式,所以表达式的值依然是5;
C:和B答案一样,表达式的值是5;
D:->的优先级高,所以先执行p->n,值为5,但是自增操作++ 为前缀式,所以先执行加1操作,表达式值为6;
故答案选D
追问
非--算术运算符--关系运算符--逻辑运算符,条件运算符--赋值运算符。这个优先性从高到低排序应该是对的吧,在这里 -> 优先性应该排在什么位置啊?
追答
( ) ,[ ],->,.
这四种运算符的优先级最高,排第一。
展开全部
p指向a[0],p->n=5
p++本身还是p,所以A.p++->n=5
p->n++ 本身还是p->n,所以B.p->n++=5
(*P).n++ 本身还是 (*P).n,所以C.(*P).n++ =5
++p->n本身表示(p->n)+1,所以D为6
需要了解a++与++a的不同,及运算符的优先顺序
p++本身还是p,所以A.p++->n=5
p->n++ 本身还是p->n,所以B.p->n++=5
(*P).n++ 本身还是 (*P).n,所以C.(*P).n++ =5
++p->n本身表示(p->n)+1,所以D为6
需要了解a++与++a的不同,及运算符的优先顺序
追问
非--算术运算符--关系运算符--逻辑运算符,条件运算符--赋值运算符。这个优先性从高到低排序应该是对的吧,在这里 -> 优先性应该排在什么位置啊?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先定义了一个结构类型st,包括2个成员,第一个成员就是n,第二个成员就是指针变量,指向下一个st的地址。
然后定义了一个结构数组st a[3],然后*P指针,指向数组的第一个a[0],这里的a[0]={5,&a[1]},p->n=5的,就是第一个数组中第一个成员n=5。然后p->n是指针运算符是优先于++的,所以D的答案实际就是++(p->n)=++5=6,而B是5++=5,这个++前后顺序值得变化相信你应该是懂得的。A还是=5,因为p++>n,p是要先运算指针的,然后p的值增加1,指向下一个地址&a[1],C的话还是=5,那个一点.是结构成员运算符也是优于++的。那么p开始就是指向a{0},它的成员n=5,然后运算结束后,n=6,因为是后++
然后定义了一个结构数组st a[3],然后*P指针,指向数组的第一个a[0],这里的a[0]={5,&a[1]},p->n=5的,就是第一个数组中第一个成员n=5。然后p->n是指针运算符是优先于++的,所以D的答案实际就是++(p->n)=++5=6,而B是5++=5,这个++前后顺序值得变化相信你应该是懂得的。A还是=5,因为p++>n,p是要先运算指针的,然后p的值增加1,指向下一个地址&a[1],C的话还是=5,那个一点.是结构成员运算符也是优于++的。那么p开始就是指向a{0},它的成员n=5,然后运算结束后,n=6,因为是后++
追问
非--算术运算符--关系运算符--逻辑运算符,条件运算符--赋值运算符。这个优先性从高到低排序应该是对的吧,在这里 -> 优先性应该排在什么位置啊?
追答
优先级是从上到下递减,看下面。
Turbo C运算符的优先次序
()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)┃ 最高
!(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址)┃
*(指针所指内容) type(函数说明) sizeof(长度计算) ┃
*(乘) /(除) %(取模) ┃ │
+(加) -(减) ┃ │
>(位右移) ┃ │
(大于) >=(大于等于) ┃ │
==(等于) !=(不等于) ┃ │
&(位与) ┃ │
^(位异或) ┃ │
|(位或)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
考的是运算符的优先级和指针的加减。
p原来指向a[0],p+1就指向a[1]。
选项A的值等于P->n,因为这里是后加。
B同样道理。比较简单。
C。*在这里是取内容,即去p所指的内容,你可以把取内容理解成是所指对象的另一个对象名,这里相当于a[0].n++,值当然是5。
D。 指针运算符优先级极高,高于左++,这里先得到变量值5,再加1,得6。
p原来指向a[0],p+1就指向a[1]。
选项A的值等于P->n,因为这里是后加。
B同样道理。比较简单。
C。*在这里是取内容,即去p所指的内容,你可以把取内容理解成是所指对象的另一个对象名,这里相当于a[0].n++,值当然是5。
D。 指针运算符优先级极高,高于左++,这里先得到变量值5,再加1,得6。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
打开c语言书,看关于指针的章节
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询