C |高级指针|问题9

null

#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
喜欢就支持一下吧
点赞9 分享