如何将2D阵列从1D变成1D?

如何将2D阵列从1D变成1D?

问题描述:

要访问任何元素,请使用*(Ptr + i).

To access any element I use *(Ptr + i).

有什么方法可以将2D数组放入分配的内存中,以便使用array[i][j]访问任何元素?

Is there any way to put 2D array into the allocated memory in order to access any element using array[i][j]?

这是代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int *Ptr;

   Ptr = malloc(M*N*sizeof(int));

   for (i = 0; i <= M * N; i++)
      *(Ptr + i) = 1 + rand()%10;

   return 0;
}

示例

#include <stdio.h>
#include <stdlib.h>

#define N 4
#define M 3

int main()
{
    int *Ptr;
    int (*p)[M];
    int i,j;

    Ptr = malloc(M*N*sizeof(int));

    for (i = 0; i < M * N; i++){
        *(Ptr + i) = 1 + rand()%10;
//      printf("%d ", Ptr[i]);
    }
//  printf("\n");

    p=(int (*)[M])Ptr;//p[N][M]
    for(i = 0; i < N ;++i){
        for(j = 0; j < M;++j)
            printf("%d ", p[i][j]);
        printf("\n");
    }

   return 0;
}