输出是什么?(华为面试题)
#include
main()
{
int b=3;
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d\n",*ptr,*(++ptr));
}
复制代码
不
准
偷
看
答
案
题目分析:
这道题关键是输出语句中参数的执行顺序。
刚开始ptr指针初始化,ptr指向 数组arr的首地址,也就是 arr[0]的位置。
然后*(ptr++)+=123一句,其实就是 *ptr=*ptr+123;ptr++;这两句,此时执行后ptr指向数组第二个元素arr[1]
最后一句输出语句,编译器一般按照从右到左的压栈顺序(涉及编译原理课程),因此先计算后面的++ptr,因此2项输出均为arr[2]即8。
知了堂C语言函数指针小结(经典案例解析)http://pan.baidu.com/s/1jIOdP1G
网友评论