Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 动态更换阵列以更改其内存_C_Arrays - Fatal编程技术网

C 动态更换阵列以更改其内存

C 动态更换阵列以更改其内存,c,arrays,C,Arrays,我有多维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,

我有多维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.
}
#包括
无效变更(int[][4],int,int);
int main()
{
int arr[][4]={
{1, 3, 2, 4},
{3, 2, 4, 5},
{9, 3, 2, 1},
};
变化(arr,4,3);
//现在,应该有arr[4][3]=newArr
getchar();
}
无效更改(int arr[][4],int cols,int rows)
{
//创建newArr数组。
}

否。您不能更改真实数组的大小


您需要在整个过程中使用动态分配,以实现这一点。如果您不清楚如何动态分配多维数组,请参阅,例如:

确定您可以这样做,但方式略有不同。对于固定大小的数组,您无法做到这一点。您必须进行动态内存分配,然后可以根据需要使用下标。您只需要跟踪当前使用的下标,以避免错误

#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.
}
#包括
#包括
无效变更(int**,int,int);
int main()
{
int**arr=(int**)malloc(sizeof(int)*3*4);
//用你喜欢的任何方式填充这个内存。我正在使用你以前的数组
//填补。
//请注意,初始arr不是您的工作arr。它只是用于初始化
int初始值_arr[][4]={
{1, 3, 2, 4},
{3, 2, 4, 5},
{9, 3, 2, 1},
};
memcpy(arr,initial_arr,sizeof(int)*3*4);
//您可以使用与以前相同的方式访问arr
//要打印arr[1][2],您可以编写
//printf(“%d”,arr[1][2]);
变化(arr,4,3);
//现在,只需在arr中复制newArr,就可以将arr下标为arr[4][3]
memcpy(arr、newArr、sizeof(int)*3*4);
getchar();
}
无效更改(整数**arr、整数cols、整数行)
{
//创建newArr数组。
}

您需要使用
malloc
并创建一个动态数组。