题目
若有以下定义和语句: int a[]={1,2,3,4,5,6,7,8,9,10),*p=a; 则值为3的表达式是______。A. p+=2,*(p++)B. p+=2,*++pC. p+=3,*p++D. p+=2,++*p
若有以下定义和语句: int a[]={1,2,3,4,5,6,7,8,9,10),*p=a; 则值为3的表达式是______。
A. p+=2,*(p++)
B. p+=2,*++p
C. p+=3,*p++
D. p+=2,++*p
题目解答
答案
A. p+=2,*(p++)
解析
本题考查指针的运算以及逗号表达式的使用。解题的关键在于理解指针的移动、自增自减运算符的前置和后置区别,以及逗号表达式的求值规则。逗号表达式会从左到右依次计算每个子表达式的值,最后整个逗号表达式的值是最后一个子表达式的值。
选项A
- 首先执行
p += 2,这是指针的加法运算,p原本指向数组a的首元素a[0],执行该语句后,p向后移动 2 个位置,此时p指向a[2],a[2]的值为 3。 - 接着执行
*(p++),p++是后置自增运算符,先使用p的当前值进行解引用操作,即*p,此时p指向a[2],所以*p的值为 3,然后p再向后移动一个位置。整个逗号表达式的值就是最后一个子表达式*(p++)的值,为 3。