用循环,一轮控制一个变量,复制上面一行时,变动列数。复制右边一列时,变动行数。
复制下面一行时,变动列数。复制左边一列时,变动行数。
每复制完一行或一列,边界移动一行或一列。
复制一圈是4个for循环,但不确定是在上下左右那个for循环中终结,
所以每个for之后配一个跳出循环出口,条件是元素个数达标
int* spiralOrder(int** matrix, int matrixRowLen, int* matrixColLen, int* returnSize ) {
    int* arr;  //新建输出数组
    int cnt = matrixRowLen * (*matrixColLen);  //所有元素个数=行数*列数
    *returnSize = cnt;  //定义返回数组的大小
    arr = (int*)malloc(sizeof(int) * cnt);  //为新数组申请指定大小的空间
    int up = 0, down = matrixRowLen -1;   //上边界和下边界
    int left = 0, right = *matrixColLen - 1;  //左边界和右边界
    int i = 0, tmp = 0;   //原数组和新数组指针变量
    while(1){
    for(i = left; i<=right; i++)    //打印上面一行
        arr[tmp++] = matrix[up][i]; 
    if(tmp>=cnt)  //可能收网
        break;
    up++;   //上边界下移一行
    for(i = up; i<= down; i++)   //打印右边一列
        arr[tmp++] = matrix[i][right];
    if(tmp>=cnt)
        break;
    right--;  //右边界左移一位
    for(i = right; i>=left; i--)   //打印下面一行
        arr[tmp++] =  matrix[down][i];
    if(tmp>=cnt)
         break;
    down--;  //下边界上移一行
    for(i = down; i>= up; i--)   //打印左边一列
        arr[tmp++] = matrix[i][left];
    if(tmp>=cnt)
        break;
    left++;  //左边界右移一列
    }   //继续打印下一圈
    return arr;   
}