printf函数是从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有我们看见的结果是,从右边开始处理的。
我们先看下这段代码,C语言经典面试题:
#include <stdio.h>
int main()
{
int arr[] = {11,12,13,14,15};
int *p = arr;
*(++p) += 100;
printf("%d %d \n",*(p),*(p++));
return 0;
}
输出结果:13 112
这段代码中,指针p向数组arr的的首地址。
(++p) += 100;指针地址先偏移1后取内容为12,在加上100为112.
在执行printf时,先从最右面执行,**(p++),先取内容后再偏移,此时p的值为112,§时,指针已经偏移到13,所以输出的值为13