我可以使用 **i 而不是 *i[20] 来初始化二维数组吗?

标签 c pointers multidimensional-array segmentation-fault

我想使用指向指针的指针初始化一个二维数组,我编写了以下代码。
下面的代码是很多硬编码,但由于我是指针的初学者,我想这样做。
该代码未将输出作为段错误给出。
不过我觉得一切都很好。

    #include<stdio.h>  
    #include<stdlib.h>  
    int readinput1(int **a,int row,int column);
    int readinput2(int **b,int row,int column);
    int sumoftables(int **a,int **b,int **c,int row,int column);
    int displayresult(int **c,int row,int column);

int main()
    {
        int **a,**b,**c,row,column;
        printf("no.of rows of desired matrix:");
        scanf("%d",&row);
        printf("no.of columns of desired matrix:");
        scanf("%d",&column);
        a=(int**)malloc(row*column*sizeof(int));>can i do the memory allocation like this
        readinput1(a,row,column);
        b=(int**)malloc(row*column*sizeof(int));
        readinput2(b,row,column);
        c=(int**)malloc(row*column*sizeof(int));
        sumoftables(a,b,c,row,column);
        printf("\n\n\n");
        displayresult(c,row,column);

    }
    int readinput1(int **a,int row,int column)
    {
        int p,q;
        for(p=0;p<row;p++)
        {
            for(q=0;q<column;q++)
            {
                scanf("\n%x",(*(a+p)+q));
            }
        }
        return 0;
    }


    int readinput2t2(int **b,int row,int column)
    {
        int p,q;
        for(p=0;p<row;p++)
        {
            for(q=0;q<column;q++)
            {
                scanf("\n%x",(*(b+p)+q));
            }
        }
        return 0;
    }
    int sumoftables(int **a,int **b,int **c,int row,int column)
    {
        int p,q;
        for(p=0;p<row;p++)
        {
            for(q=0;q<column;q++)
            {
                *(*(c+p)+q)=*(*(a+p)+q)+*(*(b+p)+q);
            }
        }
                  return 0;
    }
    int displayresult(int **c,int row,int column)
    {
        int r,s;
        for(r=0;r<row;r++)
        {
            for(s=0;s<column;s++)
            {
                printf("\t%d",*(*(c+r)+s));
            }
            printf("\n");
        }
        return 0;
    }


  [1]: /image/aj1AI.png

最佳答案

您可以使用以下代码为二维数组分配内存:

void array_2d_allocate(int ***a, int row, int column)
{
    *a =(int**)malloc(row*sizeof(int*));
    for(int i=0; i < row; i++){
        (*a)[i] = (int*)malloc(column*sizeof(int));
    }
}

int main()
{
    int **a,**b,**c,row,column;
    printf("no.of rows of desired matrix:");
    scanf("%d",&row);
    printf("no.of columns of desired matrix:");
    scanf("%d",&column);
    array_2d_allocate(&a, row, column);
    readinput1(a,row,column);
    array_2d_allocate(&b, row, column);
    readinput2(b,row,column);
    array_2d_allocate(&c, row, column);
    sumoftables(a,b,c,row,column);
    printf("\n\n\n");
    displayresult(c,row,column);
}

关于我可以使用 **i 而不是 *i[20] 来初始化二维数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42121901/

相关文章:

c - 优化的字节数组移位器

c - 从辅助线程获取主线程

c - valgrind 检测到内存泄漏但应用程序工作

c - "Address 0x7f out of bounds"通过函数传递参数

c++ - 指向二维数组的指针

c - 如何通过引用将 char * foo[SIZE][SIZE] 传递给函数并取消引用它?

c++ - 在不创建任何类型对象的情况下声明 vector 和指针

c - 为什么我的 pthread_t 指针数组会在 pthread_create 上导致段错误,但对数组中 pthread_t 的引用不会

php - 如何从mysql创建多维数组

c++ - 将指针传递给二维数组 C++