逗号表达式内自增问题

我是这样想的:逗号表达式中先取a和b的值,然后执行表达式3,输出一个a+b的值3,然后再将a,b自增

#include 

int main()
{
    int a = 1, b = 2;
    printf("%d", (a++, b++, a + b));  //5

    return 0;
}


逗号表达式里面 ,也是要从左往右 计算各个表达式的,最后逗号表达式的值取 最后一个表达式的值
所以这里先是 a++ , 然后 b++, 最后 a + b = 2 + 3 = 5

先执行,才能有“返回值”。这里按照逗号表达式的结合顺序,先执行a++,再执行b++,最后执行a+b。
类似的有“i=i++”,先执行i++,然后把i自增前的值赋给i,i的值不变。
后缀自增的优先级很高,只是它返回的值是自增前的值。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/669770
  • 这篇博客你也可以参考下:员工张三有两个主管,主管A和主管B会根据张三的表现给他调工资,有可能增加,有可能减少,试用两个线程执行,并试用线程同步解决数据完整性问题
  • 同时,你还可以查看手册:c语言-表达式 中的内容
  • 除此之外, 这篇博客: 复杂A+B问题(两个很大的数相加问题)中的 复杂A+B问题(两个很大的数相加问题) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    思路:用字符串实现
    *1.先将A和B以字符串的形式输入。
    2.调用字符串函数求A和 B的长度
    3.找出长的字符串数组作为存放和的数组
    4.将A和B逆序——一位一位从后往前加
    5.定义变量one——表示是否要进位
    6.定义变量sum——存放临时和(比如:5+9=14)
    7.求sum = str1[i]-‘0’+str2[i]-‘0’+one; //将字符数字变为普通数字
    8.求one = sum/10; //判断是否要进位
    9.求本位数 temp = sum%10; //得出本位的数字
    10.再将本位数转化为字符串 str1[i] = temp+‘0’;
    11.如果短的字符串数组用完,只需把长的字符串数组复制到存和数组
    12.注意进位判断:
    temp = str1[i]-‘0’+one;
    one = temp/10;
    temp = temp%10;
    str1[i] = temp+‘0’;
    13.最后一步还得判断是否存和数组得变长:
    if (one)
    str1[strlen(str1)]=‘1’;//如果最后一位要进位
    //则数组的长度会加1,同时把下一位赋值1
    (如果自定义存和数组为长数组加一就可以不用判断)
    *
    代码实现:

    #include<stdio.h>
    #include<string.h>
    void reversal(char *str)        //字符数组逆序
    {
        int len = strlen(str);
        int i;
        for (i=0;i<(len+1)/2;i++)
        {
            char p; //临时字符用来做交换的中间变量
            p = str[i];
            str[i] = str[len-i-1];
            str[len-1-i] = p;
        }
    }
    void aid(char *str1,char *str2) //求复杂A+B问题
    {
        int one = 0;    //定义one 看是否要进1
        int temp = 0;   //定义临时和,大于10就进1,小于就不进
        int i;
        if (strlen(str1)>strlen(str2))  //寻找长的数组作为放和数组
        {
           for (i=0;i<strlen(str2);i++)
           {
               temp = str1[i]-'0'+str2[i]-'0'+one;  //将字符数字变为普通数字
               one = temp/10;   //判断是否要进位
               temp = temp%10;  //得出本位的数字
               str1[i] = temp+'0';
           }
           for (i=strlen(str2);i<strlen(str1);i++)//当短的数组用完,只需把长数组的数组移入即可
           {                                      //但是的判断短数组的最后一位是否要进位
               temp = str1[i]-'0'+one;
               one = temp/10;
               temp = temp%10;
               str1[i] = temp+'0';
           }
           if (one)
            str1[strlen(str1)]='1';//如果最后一位要进位
                                //则数组的长度会加1,同时把下一位赋值1
        }
        else        //同理 if
        {
            for (i=0;i<strlen(str1);i++)
           {
               temp = str1[i]-'0'+str2[i]-'0'+one;
               one = temp/10;
               temp = temp%10;
               str2[i] = temp+'0';
           }
           for (i=strlen(str1);i<strlen(str2);i++)
           {
               temp = str2[i]-'0'+one;
               one = temp/10;
               temp = temp%10;
               str2[i] = temp+'0';
           }
           if (one)
            str2[strlen(str2)]='1';
        }
    }
    int main()
    {
        char str1[1000];
        char str2[1000];
        scanf("%s",&str1);
        scanf("%s",&str2);
        reversal(str1);
        reversal(str2);
        aid(str1,str2);
        if (strlen(str1)>strlen(str2))
        {
            reversal(str1);
            puts(str1);
        }
        else
        {
            reversal(str2);
            puts(str2);
        }
        return 0;
    }
    
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^