1.输入的是m*n的矩阵,采用大数组包小数组的形式,每行为一个数组,m个数组构成一个大数组。
2.输出的是一个一维数组,按照上-右-下-左的形式一次一条边地输出。
3.因为可能在上下左右任何一条边结束,所以在输出每条边时都要判断是否结束。
4.每遍历完一条边,该边的边界值就会改变,而且会影响到下一条边的输入,要注意。
int* printMatrix(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, k = 0;   //双指针,同步移动
    while(1){
        for(i = left; i<=right; i++)
            arr[k++] = matrix[up][i];  //上边
        if(k >= cnt)
            break;
        up++;
        for(i = up; i<=down; i++)
            arr[k++] = matrix[i][right];  //右边
        if(k >= cnt)
            break;
        right--;
        for(i = right; i>=left; i--)
            arr[k++] = matrix[down][i];   //下边
        if(k >= cnt)
            break;
        down--;
        for(i = down; i>=up; i--)
            arr[k++] = matrix[i][left];    //左边
        if(k >= cnt)
            break;
        left++;
    }
    return arr;
}