输出结果b-a应该是什么,为什么呢?

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。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7526180
  • 这篇博客也不错, 你可以看下【第03题】给定 a 和 b ,交换它们的值并输出 | 四种解法
  • 除此之外, 这篇博客: 用指针传递参数中的    交换a,b的值: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #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;
    }