学了这么久的C语言,没想到对C语言中常见的printf函数还不是很了解。...有以下程序段:
设int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
答案为什么是:8...这个题考的关键就是printf的运算顺序。
printf的参数,函数printf从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有从右边开始处理的。...这个是比较绕的一个问题,主要考验的是i++ 和++i :
我们逐个分析:
int arr[]={6,7,8,9,10};
int *ptr=arr;
//这里ptr是数组的首地址。...也就是说,这个时候ptr指向的数组第二个位置,也就是7
printf("%d,%d",*ptr,*(++ptr));
//这一句有一个函数参数入栈的顺序,一般VC的编译器是从右往左入栈,那么这个运算也自然是从右往左