a++与++a的区别及一些栗子
引子
最近看到一道题是这样的:
先给出你下列代码:
#include<stdio.h>
int main(void)
{
char ch;
while ((ch = getchar()) != '\n') {
putchar(ch++);
putchar(++ch);
}
return 0;
}
问当输入 Harhar 会输出什么?
想要做出这道题,就必须明白++a与a++两种自增的区别
正文
#include<stdio.h>
int main(void)
{
int a = 1;
a++;//++a;
printf("%d", a);
return 0;
}
输出a的值都是 2
- a++是先执行表达式后再自增,执行表达式时使用的是a的原值
#include<stdio.h>
int main(void)
{
int a, y;
a = 1;
y = a++;
printf("%d", y);
return 0;
}
输出的y的值为 1
- ++a是先自增再执行表达示,执行表达式时使用的是自增后a的值
#include<stdio.h>
int main(void)
{
int a, y;
a = 1;
y = ++a;
printf("%d", y);
return 0;
}
输出的y的值为 2
- a++
#include<stdio.h>
int main(void)
{
int a;
a = 1;
printf("%d", a++);
return 0;
}
输出 1
- ++a
#include<stdio.h>
int main(void)
{
int a;
a = 1;
printf("%d", ++a);
return 0;
}
输出 2
#include<stdio.h>
int main(void)
{
int t = 3;
while (t--) {
printf("Hellow world!\n");
}
return 0;
}
输出为:
Hellow world!
Hellow world!
Hellow world!
结尾
此时再来看刚开始的这道题,当输入Harhar时, putchar(ch++) 会将原来的字母原样输出,此时的ch的值已经自增 ,因此putchar(++ch) 会将原来字母对应的ASCII码加 2 所对应的字母输出
Output:
HJacrthjacrt