关于动态二维数组

baother0 2012-03-28 10:34:31
怎么使用c语言实现动态分配二维数组?
...全文
109 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
猪头小哥 2012-03-28
  • 打赏
  • 举报
回复
int **p = (int*)malloc(10 * sizeof(int *));
for (int i = 0; i < 10; i++)
p[i] = (int*)malloc(10 * sizeof(int));
赵4老师 2012-03-28
  • 打赏
  • 举报
回复
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
p=(int **)malloc(4*sizeof(int *));
if (NULL==p) return;
for (i=0;i<4;i++) {
p[i]=(int *)malloc(5*sizeof(int));
if (NULL==p[i]) return;
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
p[i][j]=i*5+j;
}
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
printf(" %2d",p[i][j]);
}
printf("\n");
}
for (i=0;i<4;i++) {
free(p[i]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19

//在堆中开辟一个3×4×5的3维int数组
#include <stdio.h>
#include <malloc.h>
int ***p;
int i,j,k;
void main() {
p=(int ***)malloc(3*sizeof(int **));
if (NULL==p) return;
for (i=0;i<3;i++) {
p[i]=(int **)malloc(4*sizeof(int *));
if (NULL==p[i]) return;
for (j=0;j<4;j++) {
p[i][j]=(int *)malloc(5*sizeof(int));
if (NULL==p[i][j]) return;
}
}
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
for (k=0;k<5;k++) {
p[i][j][k]=i*20+j*5+k;
}
}
}
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
for (k=0;k<5;k++) {
printf(" %2d",p[i][j][k]);
}
printf("\n");
}
printf("---------------\n");
}
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
free(p[i][j]);
}
free(p[i]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19
//---------------
// 20 21 22 23 24
// 25 26 27 28 29
// 30 31 32 33 34
// 35 36 37 38 39
//---------------
// 40 41 42 43 44
// 45 46 47 48 49
// 50 51 52 53 54
// 55 56 57 58 59
//---------------

//在堆中开辟一个2×3×4×5的4维int数组
#include <stdio.h>
#include <malloc.h>
int ****p;
int h,i,j,k;
void main() {
p=(int ****)malloc(2*sizeof(int ***));
if (NULL==p) return;
for (h=0;h<2;h++) {
p[h]=(int ***)malloc(3*sizeof(int **));
if (NULL==p[h]) return;
for (i=0;i<3;i++) {
p[h][i]=(int **)malloc(4*sizeof(int *));
if (NULL==p[h][i]) return;
for (j=0;j<4;j++) {
p[h][i][j]=(int *)malloc(5*sizeof(int));
if (NULL==p[h][i][j]) return;
}
}
}
for (h=0;h<2;h++) {
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
for (k=0;k<5;k++) {
p[h][i][j][k]=h*60+i*20+j*5+k;
}
}
}
}
for (h=0;h<2;h++) {
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
for (k=0;k<5;k++) {
printf(" %3d",p[h][i][j][k]);
}
printf("\n");
}
printf("--------------------\n");
}
printf("=======================\n");
}
for (h=0;h<2;h++) {
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
free(p[h][i][j]);
}
free(p[h][i]);
}
free(p[h]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19
//--------------------
// 20 21 22 23 24
// 25 26 27 28 29
// 30 31 32 33 34
// 35 36 37 38 39
//--------------------
// 40 41 42 43 44
// 45 46 47 48 49
// 50 51 52 53 54
// 55 56 57 58 59
//--------------------
//=======================
// 60 61 62 63 64
// 65 66 67 68 69
// 70 71 72 73 74
// 75 76 77 78 79
//--------------------
// 80 81 82 83 84
// 85 86 87 88 89
// 90 91 92 93 94
// 95 96 97 98 99
//--------------------
// 100 101 102 103 104
// 105 106 107 108 109
// 110 111 112 113 114
// 115 116 117 118 119
//--------------------
//=======================
//
蓝枫10 2012-03-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20060929/21/5057765.html
SuperLy 2012-03-28
  • 打赏
  • 举报
回复
还要加个转换:int **pXXX=(int **)Points;
然后 pXXX[][];
未注销 2012-03-28
  • 打赏
  • 举报
回复

int **p = (int*)malloc(10 * sizeof(int));
for (int i = 0; i < 10; i++)
p[i] = (int*)malloc(10 * sizeof(int));
SuperLy 2012-03-28
  • 打赏
  • 举报
回复

unsigned long SizeY = y*EachSize, offset=0;
unsigned char *space = new unsigned char[x*SizeY]; }
void **Points = new void*[x];
for (unsigned long i=0; i<x; i++)
{Points[i] = space + offset; offset+=SizeY;}

如果是32位int,EachSize=4;
然后就可以直接以 Points[x][y];的方式使用
baother0 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
申请一个一维数组,其长度为你要实现的二维数组的行列数之积
[/Quote]
这样还是一位数组呀!
baother0 2012-03-28
  • 打赏
  • 举报
回复
这样还是一位数组呀!
baichi4141 2012-03-28
  • 打赏
  • 举报
回复
申请一个一维数组,其长度为你要实现的二维数组的行列数之积
Lynn_Iris 2012-03-28
  • 打赏
  • 举报
回复
(1)已知第二维
Code-1
char (*a)[N];//指向数组的指针
a = (char (*)[N])malloc(sizeof(char *) * m);
printf("%d\n", sizeof(a));//4,指针
printf("%d\n", sizeof(a[0]));//N,一维数组
free(a);
(2)已知第一维
Code-2
char* a[M];//指针的数组
int i;
for(i=0; i<M; i++)
a[i] = (char *)malloc(sizeof(char) * n);
printf("%d\n", sizeof(a));//4*M,指针数组
printf("%d\n", sizeof(a[0]));//4,指针
for(i=0; i<M; i++)
free(a[i]);
(3)已知第一维,一次分配内存(保证内存的连续性)
Code-3
char* a[M];//指针的数组
int i;
a[0] = (char *)malloc(sizeof(char) * M * n);
for(i=1; i<M; i++)
a[i] = a[i-1] + n;
printf("%d\n", sizeof(a));//4*M,指针数组
printf("%d\n", sizeof(a[0]));//4,指针
free(a[0]);
(4)两维都未知
Code-4
char **a;
int i;
a = (char **)malloc(sizeof(char *) * m);//分配指针数组
for(i=0; i<m; i++)
{
a[i] = (char *)malloc(sizeof(char) * n);//分配每个指针所指向的数组
}
printf("%d\n", sizeof(a));//4,指针
printf("%d\n", sizeof(a[0]));//4,指针
for(i=0; i<m; i++)
{
free(a[i]);
}
free(a);
(5)两维都未知,一次分配内存(保证内存的连续性)
Code-5
char **a;
int i;
a = (char **)malloc(sizeof(char *) * m);//分配指针数组
a[0] = (char *)malloc(sizeof(char) * m * n);//一次性分配所有空间
for(i=1; i<m; i++)
{
a[i] = a[i-1] + n;
}
printf("%d\n", sizeof(a));//4,指针
printf("%d\n", sizeof(a[0]));//4,指针
free(a[0]);
free(a);
goldbeef 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

C/C++ code
int **p = (int*)malloc(10 * sizeof(int *));
for (int i = 0; i < 10; i++)
p[i] = (int*)malloc(10 * sizeof(int));
[/Quote]++
goldbeef 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

C/C++ code
int **p = (int*)malloc(10 * sizeof(int *));
for (int i = 0; i < 10; i++)
p[i] = (int*)malloc(10 * sizeof(int));
[/Quote]++
goldbeef 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

C/C++ code
int **p = (int*)malloc(10 * sizeof(int *));
for (int i = 0; i < 10; i++)
p[i] = (int*)malloc(10 * sizeof(int));
[/Quote]++

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧