早教吧 育儿知识 作业答案 考试题库 百科 知识分享

指针问题设intx[]={1,2,3,4,5,6},*p=x;则数值为3的表达式是(B)。(A)p+=2,*++p(B)p+=2,*p++(C)p+=3,*p(D)p+=2,++*p*p++这个等于数值3不懂~求解释。。

题目详情
指针问题
设int x[ ]={1,2,3,4,5,6},*p=x;则数值为3的表达式是( B )。
(A) p+=2, *++p (B) p+=2, *p++
(C) p+=3, *p (D) p+=2, ++*p
*p++ 这个等于数值3不懂~求解释。。
▼优质解答
答案和解析
这其实考察了++的前置和后置的区别。
*p=x;将数组x的首地址赋值给p,即x[0]的地址,这样p就指向了数组。当执行完p+=2时,即指针偏移了2*4个字节,指向了x[2]元素,即值为3的地址,因此此时*p就为3了。
当++后置时,即*p++时,是先执行*p,输出指针p指向的地址中的值,即3,再++,此时指针p指向x[3]的地址;
当++前置时,即*++p时,因为自增运算符++的优先级高于取值运算符*的优先级,所以先执行++,即p存放x[3]的地址,指向x[3],再执行*p,则输出4。
要输出3,则应该为++后置,要输出4则应该为++前置。并且前提是p+=2,因此选择B。
记住++在变量位置的不同将导致不同的操作,一句话:++在变量前(即前置)则先执行++再取值运算;++在变量后(即后置)则先取值运算再执行++。
希望你能明白,希望对你有帮助,有啥疑问咱们再讨论,呵呵!