C数据结构-数组指针

leetcode102题,二叉树的层次遍历

楼主太难了,指针傻傻分不清,不单独写一篇不足以泄愤!!
一、功能函数的输出

int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
    
    


/* A、返回一个int ** ,理解是一个二维数组,步骤如下:*/
1、申请一维指针空间,用来存行号
int ** res = (int ** )malloc(sizeof(int *) * row);
2、给每一个行号申请空间(如果列数均匀可以批量申请,此题目我选了按需申请)。
res[i] = (int *) malloc(sizeof(int) * column);
3、可以直接进行赋值操作了
res[i][j] = tmp->val;

/* B、如果入参是int *,理解returnSize是一个变量的指针,赋值方法如下:*/
对地址直接赋值
* returnSize = gets_tree_row(root);

/* C、如果入参是int,理解returnColumnSize是一个数组的指针的指针,赋值方法如下:*/
1、申请一个一维变量的空间。
2、把returnColumnSize取地址赋值过去
*returnColumnSizes = (int*)malloc(sizeof(int) * row);
3、对一维空间的赋值操作如下
(*returnColumnSizes)[i] = column;

批量申请方法(注意:对指针做加减是自动乘了元素大小的):

char ***result;
char **ret;
void Initial(int** returnColumnSizes, int strsSize){
    
    
    int i;
    result = (char***)malloc(sizeof(char**) * strsSize);
    ret = (char**)malloc(sizeof(char*) * strsSize * strsSize);
    for (i = 0; i < strsSize; i++) {
    
    
        result[i] = ret + strsSize * i; //非常重要,此处是strSize*i,而不是strSize*i*sizeof(char*)
    }
    *returnColumnSizes = (int*)malloc(sizeof(int) * strsSize);
    memset(*returnColumnSizes, 0, sizeof(int) * strsSize);
}

二、int型 二维数组 Main函数构造
main函数构造的时候,很多不会的。
1、二维指针,可以用int *a[4]来存放,把a作为入参。
2、把一个指针n取地址,作为二维指针的入参。
可以看如下代码的运行结果:
aa是一个二维数组的指针
a是一个指针数组
在这里插入图片描述
三、char型 二维数组 Main函数构造
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45554139/article/details/104638909
今日推荐