这两个计算方法为什么不一样


#include 

int main()
{
    int x = 4;
    int y = (++x) + (++x) + (++x);
    printf("x = %d, y = %d\n", x, y); //x = 7, y = 19

    x = 4;
    y = 0;
    y = (++x) + (++x);
    printf("x = %d, y = %d", x, y);   //x = 6, y = 12
    return 0;
}

不同编译器优先级不一样
有的先算3个++x,再算x+x+x
而有的会先算2个++x,然后x+x,再++x,再和剩下的一个相加

多了一个++x,怎么会一样啊

  • 你可以参考下这篇文章:数值计算方法实验
  • 除此之外, 这篇博客: 常见一维数组的排序方法中的 数组扩容 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 数组扩容是数组的一个比较重要的特性,在原先数组长度基础上,创建一个新数组新数组长度为原来数组长度+n。之后再将原来数组的所有元素遍历一遍交给新数组。之后将新数组地址返回给原先数组名即可。

     

    import java.util.*;
    /*
    数组扩容,其实就是创建一个新的数组,将元素赋值进去之后将新的地址返回即可
    */ 
    class test3{
        public static void main(String [] args){
            int[] arr=new int[]{1,2,3};
            arr=copyOf(arr,arr.length+1);
            arr[arr.length-1]=5;
            System.out.println(Arrays.toString(arr));
        }
    
        public static int[] copyOf(int[] arr,int newlen){
            int[] newarr=new int[newlen];
            for(int i=0;i<arr.length;i++){
                newarr[i]=arr[i];
            }
    
            return newarr;
        }
    }

  • 您还可以看一下 传智老师的多角度带你编写更规范的黑盒测试用例课程中的 等价类设计测试用例的步骤小节, 巩固相关知识点