++i和i++和i=i+1在比较中的区别,代码题

在练习的时候遇到了这样一个问题,求教!

蛇形填数问题,

其中while循环中的最后一条while语句,**while(y+1<n && !a[x][y+1])**
如果改成while(**y++**<n && !a[x][y+1])或者while(**++y**<n && !a[x][y+1]);
就不会得到正确的蛇形填数结果,
错误结果如下
图片说明

正确结果如下

图片说明

#include <iostream>
#include <string.h>
int main(int argc, char** argv) {
    int n;n=7;int a[n][n];memset(a,0,sizeof(a));
    int step=1;
    int x=0;int y=n-1;
    a[0][y]=1;
    while(step<n*n){
        while(x+1<n  && !a[x+1][y]) a[++x][y]=++step;
        while(y-1>=0 && !a[x][y-1]) a[x][--y]=++step;
        while(x-1>=0 && !a[x-1][y]) a[--x][y]=++step;
        while(y+1<n  && !a[x][y+1]) a[x][++y]=++step;
    }
    for(x=0;x<n;x++){
        for(y=0;y<n;y++){
            printf("%4d",a[x][y]);
        }
        printf("\n");
    }
    return 0;
}

求解!

while(y+1<n && !a[x][y+1]),该语句中y的值没有改变;
如果改成while(**y++** 则表示y++ while(**++y** 则表示++y while(x+1 while(y-1>=0 && !a[x][y-1]) a[x][--y]=++step;
while(x-1>=0 && !a[x-1][y]) a[--x][y]=++step;
while(y+1 可改为
while(++x while(--y>=0 && !a[x][y]) a[x][y]=++step;
while(--x>=0 && !a[x][y]) a[x][y]=++step;
while(++y<n && !a[x][y]) a[x][y]=++step;