编程陷阱

  1. 运算符的优先级

k2 = k1 + (step+k1%step)<<1; // 先算加法,最后移位
k2 = k1 + ((step+k1%step)<<1); // 先移位,再算加法

  1. 循环执行顺序
    for(j = i-1; j >= 0;)
    {
    if(nums[j] < nums[i] && lol[j] > k) {
    k = lol[j];
    j -= lol[j];
    }else{
    –j;
    }
    }
    执行完,j=j-1; 程序直接进去循环主体,那么当i=0时,j=-1,并不符合循环条件j >= 0.

  2. 赋值操作: 整数和指针类型不能用同一个0初始化。
    int ival, *pval;
    ival = pval = 0;
    // error: cannot assign the value of a pointer to an int.

    ival = pval = 0; <> ival = (pval = (int *)0); // 右结合性
    <
    > ival = (int *) 0; // 类型不匹配

你可能感兴趣的:(coding)