如何将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;
}