想问一下第4行和第9行是拿来干嘛的?

int** generate(int numRows, int* returnSize, int** returnColumnSizes)
{
    int** ret = (int **)malloc(sizeof(int*) * numRows);//ret接收
    *returnSize = numRows;
    *returnColumnSizes = (int *)malloc(sizeof(int) * numRows);
    for (int i = 0; i < numRows; ++i) 
    {
        ret[i] = (int*)malloc(sizeof(int) * (i + 1));
        (*returnColumnSizes)[i] = i + 1;
        ret[i][0] = ret[i][i] = 1;
        for (int j = 1; j < i; ++j)
        {
            ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];
        }
    }
    return ret;
}

这段代码是leecode的第118题,看不懂第4行和第9行是拿来干嘛的。尤其是哪个returnSize,看不懂T T。
刚开始做leecode的悲伤

4行:函数返回的是ret,这个是ret指针数组元素的个数。
ret是个二维数组,行数是numRows,每一行的长度不一样,长度为i+1,每一行的长度保存到数组returnColumnSizes里,形参returnColumnSizes用int **是为了把指针值带出函数。