C 串联2个矩阵
我有一个动态分配的矩阵,我想创建另一个,这是第一个矩阵,但旁边有另一个副本。例如,我有矩阵: 11 22 我的新矩阵将是: 1 1 1 1 2 2 2 2 如何连接它们?这是我的C代码:C 串联2个矩阵,c,dynamic,matrix,C,Dynamic,Matrix,我有一个动态分配的矩阵,我想创建另一个,这是第一个矩阵,但旁边有另一个副本。例如,我有矩阵: 11 22 我的新矩阵将是: 1 1 1 1 2 2 2 2 如何连接它们?这是我的C代码: #include<stdio.h> #include<conio.h> #include<stdlib.h> int **create_matrix(int row, int col) { int **matrix = malloc(sizeof (int*)*ro
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int **create_matrix(int row, int col)
{
int **matrix = malloc(sizeof (int*)*row);
int i;
for (i = 0; i < row; i++)
{
matrix[i] = malloc(sizeof (int)*col);
}
return matrix;
}
void matrix_input(int **matrix, int row, int col)
{
int i, j;
printf("enter the elements of the matrix:\n");
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
scanf("%d", &matrix[i][j]);
}
}
}
int **extend_matrix(int **matrix, int row, int col)
{
int k, j;
int i;
int **extend_matrix = malloc(sizeof (int*)*row);
for (k = 0; k < row + row; k++)
{
extend_matrix[k] = malloc(sizeof (int)*col);
}
extend_matrix = matrix;
extend_matrix = (int**) realloc(extend_matrix, (row + row) * sizeof (int*));
extend_matrix[j] = matrix[j];
for (i = 0; i < row; i++)
{
extend_matrix[k] = matrix[i];
}
}
void print_matrix(int **matrix, int row, int col)
{
int i, j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %d ", matrix[i][j]);
}
printf("\n");
}
}
void print_extend_matrix(int **extend_matrix, int row, int col)
{
int k, j;
for (k = 0; k < row + row; k++)
{
for (j = 0; j < col; j++)
{
printf("%d", extend_matrix[k][j]);
}
printf("\n");
}
}
int main(void)
{
int **matrix;
int **extend_matrix;
int row, col;
printf("enter the number of rows of cols:");
scanf("%i%i", &row, &col);
matrix = create_matrix(row, col);
matrix_input(matrix, row, col);
print_matrix(matrix, row, col);
print_extend_matrix(extend_matrix, row, col);
getch();
return 0;
}
我认为extend\u matrix应该调用create\u matrix来创建一个宽度加倍的新矩阵,然后使用两个简单的嵌套循环来填充它。我认为extend\u matrix应该调用create\u matrix来创建一个宽度加倍的新矩阵,然后使用两个简单的嵌套循环来填充它。如果这是您要查找的内容:
int concat(void * oldM, int row, int col,void& *newM) {
newM = malloc(sizeof(int)*row*col*2);
for(int i = 0;i<2;++i)
for(int j=0;j<2;++j)
newM[i][j+col] = newM[i][j] = oldM[i][j];
for(int i = 0;i<2;++i) {
for(int j=0;j<4;++j) {
cout<<"\t"<<newM[i][j];
}
cout<<"\n";
}
}
如果这是您正在寻找的:
int concat(void * oldM, int row, int col,void& *newM) {
newM = malloc(sizeof(int)*row*col*2);
for(int i = 0;i<2;++i)
for(int j=0;j<2;++j)
newM[i][j+col] = newM[i][j] = oldM[i][j];
for(int i = 0;i<2;++i) {
for(int j=0;j<4;++j) {
cout<<"\t"<<newM[i][j];
}
cout<<"\n";
}
}
尽管@NPE向您建议了一种更好的方法。如果要在扩展_矩阵中分配内存 代码读取注释中出现错误
在这一行,您分配矩阵以扩展_矩阵,这是错误的。您需要在此处循环以从矩阵[]复制每个元素,以扩展_矩阵[]。尽管@NPE向您建议了一种更好的方法,但请首先更正内存分配代码。如果要在扩展_矩阵中分配内存 代码读取注释中出现错误
在这一行,您分配矩阵以扩展_矩阵,这是错误的。您需要在此处循环以从矩阵[]复制每个元素,以扩展_矩阵[]。但是首先纠正内存分配代码这是最简单的方法。这是最简单的方法。您没有使用真正的矩阵,而只是通过指针数组进行模拟。这从一开始就是一个糟糕的设计。快速浏览一下,您是否忘记在代码中调用extend_矩阵?此外,您不会从扩展矩阵返回任何内容。您没有使用可验证的矩阵,而只是通过指针数组进行模拟。这从一开始就是一个糟糕的设计。快速浏览一下,您是否忘记在代码中调用extend_矩阵?此外,您不会从扩展矩阵返回任何内容
extend_matrix = matrix;