我有多维arr [3] [4]。
然后我为newArr [4] [3]分配内存,并将arr的行更改为列和列,将其保存到newArr。
是否可以使用newArr动态替换arr?澄清情况的一个小例子:
#include <stdio.h>
void change(int[][4], int, int);
int main()
{
int arr[][4] = {
{1, 3, 2, 4},
{3, 2, 4, 5},
{9, 3, 2, 1},
};
change(arr, 4, 3);
// now, there should be arr[4][3] = newArr
getchar();
}
void change(int arr[][4], int cols, int rows)
{
// create newArr array.
}
答案 0 :(得分:2)
没有。您无法更改真实数组的大小。
您需要始终使用动态分配才能实现此功能。如果您不清楚如何动态分配多维数组,请参阅例如http://c-faq.com/aryptr/dynmuldimary.html
答案 1 :(得分:0)
当然,你可以这样做,但方式略有不同。对于固定大小的阵列,您无法做到这一点。您必须进行动态内存分配,之后您可以根据需要使用下标。您只需要跟踪当前正在使用的下标,以避免错误。
#include <stdio.h>
#include<string.h>
void change(int **, int, int);
int main()
{
int **arr = (int **)malloc(sizeof(int)*3*4);
// Fill this memory in whatever way you like. I'm using your previous array
// to fill arr.
// Note that initial_arr is not your working arr. Its just for initialization
int initial_arr[][4] = {
{1, 3, 2, 4},
{3, 2, 4, 5},
{9, 3, 2, 1},
};
memcpy(arr, initial_arr, sizeof(int)*3*4);
// You can access arr in the same way as you do previously. for example
// to print arr[1][2] you can write
// printf("%d", arr[1][2]);
change(arr, 4, 3);
// now, simply copy newArr in arr. and you can subscript arr as arr[4][3]
memcpy(arr, newArr, sizeof(int)*3*4);
getchar();
}
void change(int **arr, int cols, int rows)
{
// create newArr array.
}