连接2个矩阵
我有一个动态分配的矩阵,我想创建另一个,这是第一个矩阵,但旁边有另一个副本。 例如,我有矩阵:
11 22
我的新矩阵将是:
1 1 1 1 2 2 2 2
我该如何连接它们? 这是我在C中的代码:
#include #include #include 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; }
虽然@NPE向您建议了一个更好的方法。 如果要在extend_matrix()中分配内存
代码中的错误( 阅读评论 )
int **extend_matrix = malloc(sizeof (int*)*row); ^ on row for (k = 0; k < row + row; k++) ^ where as loop is for row + row { extend_matrix[k] = malloc(sizeof (int)*col); // So this cause an error, // segment-fault }
第二,你的概念复制记忆是错误的:
extend_matrix = matrix;
在这一行,你正在为extend_matrix
指定matrix
错误。 你需要循环来将每个元素从matrix[][]
复制到extend_matrix[][]
。 ( 但首先纠正你的内存分配代码 )
我认为extend_matrix()
应该只调用extend_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"<