我正在进行C编程,其中我从用户读取了列和行的数量,并根据给定的输入创建2D数组,并使用随机值填充条目。如何根据用户输入在2D数组中删除特定列(例如,如果用户要删除第一列,我将如何重新分配矩阵空间?)
#include <stdio.h>
#include <stdlib.h>
double **initializeRandomMatrixPtr(double **a, int rows, int cols) {
a = malloc(rows * sizeof(double *));
for (int i = 0; i < rows; i++) {
*(a + i) = malloc(cols * sizeof(double));
for (int j = 0; j < cols; j++) {
*(*(a + i) + j) = rand();
}
}
return a;
}
void printMatrix(double **matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
void freeMatrix(double **matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix);
}
int main(void) {
int rows = -1;
int cols = -1;
int deletedColumn = -1;
// remove first column
printf("Enter number of rows:");
scanf("%d", &rows);
printf("Enter number of cols:");
scanf("%d", &cols);
double **matrix = initializeRandomMatrixPtr(matrix, rows, cols);
printMatrix(matrix, rows, cols);
freeMatrix(matrix, rows, cols);
printf("What column do you want to delete?");
scanf("%d", deletedColumn);
realloc(matrix, ) // what should I put for my second parameter?
return 0;
}
答案 0 :(得分:0)
因为这是家庭作业,所以我实际上不会张贴任何代码:
要重新分配较小的数组1项(整个行或一列),请按以下步骤操作:
您可能还需要通过在指针外部指针数组中至少存储条目数来跟踪此数组的状态-防止您在需要时读取超过新大小的列表的末尾再次打印大小或调整大小。
如果您尝试从另一个方向删除条目(每个分配从外部循环中删除1个条目),则过程类似:
访问外部循环中的每个条目,然后执行以下操作: