char a='1',b='2';
printf("%c,",b++);
printf("%d",b-a);
第一个printf 打印一个 字符, b++ 因为 ++ 在后,所以 b++ 这个表达式的值 为 b,即 2,所以 输出 2 这个字符,然后 b 字符 + 1,则 b = ‘3’ 这个字符
第二个printf 打印一个整数, b - a = ‘3’ - ‘1’ ,即两个字符的ascii码相减,即 51 - 49 = 2
所以 最终 打印 2,2
输出 b - a 为2 因为 b前一句自增 b现在为 '3'
b++是先用后增,则b++先输出b当前的值,然后再将b的值加1。所以第一行代码输出的是字符’2’,第二行代码输出的是’b’和’a’之间的差值,即’b’的ASCII码值减去’a’的ASCII码值,也就是50-49=1。
#include<stdio.h>
void Swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
//a=a+b;
//b=a-b;
//a=a-b;
}
int main()
{
int a = 10;
int b = 20;
printf("%d %d\n", a, b);
Swap(10, 20);
printf("%d %d\n", a, b);
return 0;
}
上述代码并未交换a,b的值,因为 Swap函数中的a,b都是局部变量, 他们的修改并未修改主函数中的a,b的值;
为了解决在Swap函数中修改主函数中的参数,我们引入指针变量:
void Swap2(int *p1, int *p2)
{
//p1->a,p2->b
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("%d %d\n", a, b);
Swap2(&a, &b);
printf("%d %d\n", a, b);
return 0;
}