#include <stdio.h> #include <stdlib.h> int main( void ) { int i; int *ptr = ( int *) malloc (5 * sizeof ( int )); for (i=0; i<5; i++) *(ptr + i) = i; printf ( "%d " , *ptr++); printf ( "%d " , (*ptr)++); printf ( "%d " , *ptr); printf ( "%d " , *++ptr); printf ( "%d " , ++*ptr); } |
(A) 编译错误 (B) 0 1 2 2 3 (C) 0 1 2 3 4 (D) 1 2 3 4 5 答复: (B) 说明: 处理此类问题时要记住的重要事项是
1) 前缀++和*运算符具有相同的优先级和从右到左的关联性。
2) Postfix++的优先级高于上述两个运算符,并且关联性是从左到右的。
我们可以应用以上两条规则来猜所有的答案
*ptr++被视为*(ptr++)
*++ptr被视为*(++ptr)
++*ptr被视为++(*ptr) 这个问题的小测验
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END