【发布时间】:2023-03-23 14:15:01
【问题描述】:
我不确定如何从 char*** 调整 char** 2D 数组的大小。 char** 2D 数组通过此调整大小函数传递,如下所示。
这里是说功能:
resize_canvas(&C, 5, 6, 5, 10, 'e');
这通过下面的代码。它打印出一个字符***,但不是我想要的大小。它必须能够从上面的函数调整到任何给定的大小:
void resize_canvas(char*** Cp, int old_width, int old_height, int new_width, int new_height, char wc){
int height = new_height;
int width = new_width;
int depth = 1;
Cp = new char**[height];
for(int i = 0; i < height; i++){
Cp[i] = new char*[width];
for(int j = 0; j < width; j++){
Cp[i][j] = new char[depth];
for(int z = 0; z < depth; ++z){
Cp[i][j][z] = wc;
cout << Cp[i][j][z];
}
}
cout << endl;
}
}
它没有给我我正在寻找的东西。之前的 char** 数组打印出这样的:
// C:
// ddddddd
// ddddddd
// ddddddd
// ddddddd
// ddddddd
// ddddddd
我需要它能够调整大小,以便以后可以这样:
// C:
// ddddddeeee
// ddddddeeee
// ddddddeeee
// ddddddeeee
// ddddddeeee
这些是我之前分配和填充 char** 2D 数组的函数:
char** allocate_canvas(int width, int height){
char **array;
char temp = 'A';
array = (char **)malloc(height* sizeof(char *));
for (int i = 0; i < height; i++){
array[i] = (char*)malloc(width* sizeof(char));
}
return array;
}
void wash_canvas(char** C, int width, int height, char wc){
for(int i = 0; i < height; i++){
for(int j = 0; j < width; j++){
C [j][i] = wc;
}
}
}
void deallocate_canvas(char** C, int width){
for(int i = 0; i < width; i++){
free(C[i]);
C[i] = NULL;
}
free(C);
}
【问题讨论】:
-
在新数组中你想用旧的
wc即d填充所有old_width * old_height元素吗? -
@sameerkn,是的,这就是我相信的目标。我将用传递给
wc的字符填充数组。调整大小后,它必须具有以前的数组值,以及调整后的数组中的新 char 值。我在我的帖子中提供了一个例子。看起来原始值仍然存在,但调整大小的数组中的值填充了新添加的插槽。
标签: c++ arrays pointers multidimensional-array function-pointers