下面的题目据说是一道华为的C语言面试题
#include <stdio.h>
int main()
{
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++) += 123;
printf("%d,%d",*ptr,*(++ptr));
return 0;
}
运行结果为:
8,8
这道题目考察的重点有两处:
- 前++和后++的区别;
*(ptr++) += 123; 等价于:
*ptr += 123; ptr++;
* (++ptr)等价于:
++ptr; 再取值 *ptr - printf函数的求值顺序
printf函数对参数从左往右读取,然后将最先读取的放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所以从右边开始处理。
printf("%d,%d", * ptr, *(++ptr)); 先计算 *(++ptr),ptr指向arr[2],再取值,结果是8,再计算 * ptr,当然结果还是8。在实际编程过程中,应避免这样的语句。