秒懂(i++)与(++i)和C语言printf("“);的机制

说来惭愧这刚才一学弟问的题、由于时间久至遗忘 我也是通过百度才知其原理 特写博客纪念督促自己

题如下:写出程序输出结果

#include
int main() {
int a = 1;
printf("%d %d %d", a++, a++, (a++) + (++a));
}

输出结果是4 3 4

要想做这个题就要先知道C语言printf("“)的打印机制,printf("“)是一个栈队列 即服从先进后出的原则,a++、a++、(a++) + (++a)先入栈的,所以出栈顺序为(a++) + (++a)、a++、a++

在解这道题之前,可以做一个这样的输出实验

#include
int main() {
int a = 1,b;
b = a++;
printf("%d\n", b); 
printf("%d\n", a); 
}

结果分别是1 和 2

因为这里b = a++;是先把a的值赋给b,再执行++运算 赋值前a=1;故输出b=1;

(ps:++a的是和a++相反 即先++再赋值)

接下来是输出a、到这一步 因为上一步赋值结束了,故执行++运算 所以输出2

回到刚才题上

先运算(a++) + (++a)里的a++

这时候a==1(先赋值),接下来运算++a,这个时候到关键点了   这里的”a“因为上一步的a++只赋值并未运算,故要先执行运算 即此时的a==2    所以此时的++a就是3(先赋值)所以a此时也等3,所以整体(a++) + (++a) 即 1+3 结果为 4 但注意a此时还=3

下一步 算a++ 这里就不解释太多了、结果显而易见是3   毕竟是先赋值嘛

最后一步 还是算a++ 这里的a因为要执行上一步留下的++ 故此时a == 3+1 即a == 4;运算就相当于4++的运算,所以输出结果是4

故本题答案 4 3 4

你可能感兴趣的:(C语言)