有关于如何定义动态二维数组并在函数中输出

#include <stdio.h>
#include <stdlib.h>
void solve(int ***ptr_nums, int n)
{
    int size;
    int s = 0;
    for (size = 1; s < n; size++)
    {
        s += size;
    }
    size -= 1;
    *ptr_nums=    (int**) malloc(sizeof(int*)*size) ;
    int i,j,cnt=1;
    for(i=0;i<size;i++) {
        (*ptr_nums)[i]=(int*) malloc(sizeof(int)*size) ;
    }
    for( i=1;i<=size;i++) {
        for( j=0;j<i;j++) {
            if(cnt<=n){
                (*ptr_nums)[i-1][j]= cnt;
            } else{
                (*ptr_nums)[i-1][j]= -1;
            } 
            cnt++;
             
        }
    }
}
int main(int argc, const char *argv[])
{
    int n;
    scanf("%d", &n);
    int **nums;
    solve(&nums, n);
    int size;
    int s = 0;
    for (size = 1; s < n; size++)
    {
        s += size;
    }
    size -= 1;
    int i,j;
    for ( i = 1; i <= size; i++)
    {
        for ( j = 0; j < i; j++)
        {
            printf("%d", nums[i - 1][j]);
        }
        printf("\n");
        free(nums[i - 1]);
    }
    free(nums);
    return 0;
}

具体的代码如上,这是一道题目的答案,而这道题着重需要思考的如何在函数中中构造一个出一个二维数组,我们都知道,可以通过二级指针来构造出一个二维数组,那么如何在一个非主函数的函数即上方的函数solve呢?

1.首先必须声明一点,传入solve中的指针必须为三级指针,因为如果是二级指针,solve函数就只是得到了一个二级指针的副本,而我们无论如何对二级指针进行操作,都不会影响到主函数,因此在这里,我们必须使用三级指针;

2.还有这个地方构造二维数组时,必须切记要写成(*p)[][]这种形式,这个原因是*的运算优先级很低,如果你写成这样*p[][],那你输入的数据可能就无法写到正确的位置,导致程序报错.

3.如果不会在主函数里构造二维数组,可以点开C语言中如何定义动态二维数组并输出_吴贝贝的博客-CSDN博客,他写的非常清楚,你完全可以照猫画虎的在函数中写,只要注意我上面的提醒事项就好

4.

 

Guess you like

Origin blog.csdn.net/just_a_fresh_man/article/details/120237515