我想使用指针指针初始化一个二维数组,我写了下面的代码
下面的代码是很多硬编码,但由于我是指针的初学者,我想这样做。
代码没有将输出作为分段错误
尽管如此,一切似乎都很好。
#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]: https://i.stack.imgur.com/aj1AI.png
答案 0 :(得分:1)
您可以使用以下代码为2D数组分配内存:
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);
}